学卫网教程:是一个免费提供流行杀毒软件教程、在线学习分享的学习平台!

金山卫士开源软件之旅(1) VS 2005环境下编译-程序设计

软件安装:金山卫士             

金山卫士它采用金山领先的云安全技术,不仅能查杀上亿已知木马,还能5分钟内发现新木马;漏洞检测针对windows7优化,速度更快;更有实时保护、插件清理、修复IE等功能,全面保护电脑的系统安全。
参考文档:
 
http://bbs.code.ijinshan.com/viewthread.php?tid=1543
 
http://bbs.code.ijinshan.com/viewthread.php?tid=929&extra=&page=2
 
1、下载代码与lib
 
http://code.ijinshan.com/
 
得到LIB4pcmanager.tbz    tip.tar.bz2
 
2、解压文件.得到oss 与LIB4pcmanager
 
3、阅读\oss\Readme.txt
 
 
+-- pcmamager   110317 release:开源卫士整体 可编译学习版本!
                110311 release:开源卫士整体
+-- kclear      110113 release:卫士垃圾清理
+-- ksm         101226 release:卫士主界面
+-- karpfw      101218 release:卫士ARP防火墙
+-- sysopt      101209  release:系统优化 之 开机加速器
+-- bksafevul   101201  release:漏洞扫描器
+-- ppro        101201  release:隐私保护器
阅读\oss\pcmanager\Readme.txt
 
 
外部库包:
http://code.ijinshan.com/download/LIB4pcmanager.tbz
下载后,将其中子目录覆盖pcmanager 目录;
即:LIB4pcmanager
├──lib
└──src
将lib 和src 目录,覆盖pcmanager 目录中的对应同名目录
 
编译
-------------------------------------------------------------------------------
按Readme.txt做吧,因为在打开\oss\pcmanager\sln\avcenter.sln后的工程avproductmgr,
 
从工程属性可以看到“附加库目录”为..\..\..\lib\win32d
 
 
 
4、
编译ksafe.sln解决方案.
 
对于beikesafe工程,把C++的包含文件的E:\winsdk\v6.0\Include 改为C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include                                       
 
                                           Lib的包含路径改为C:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib
 
当然可以直接在工具->选项->VC++里去包含文件
 
编译后提示"提示找不到BeikeUtils.lib"
 
这是因为还没编译commonlib.sln,找到后改include 与lib包含路径,OK,编译通过了.
 
这里再编译beikesafe工程,报错:
 
 
<span style="color:#ff0000;">1>正在链接...
1>scanlib.lib(klogic.obj) : 找到MSIL .netmodule 或使用/GL 编译的模块;正在使用/LTCG 重新启动链接;将/LTCG 添加到链接命令行以改进链接器性能
1>LINK : warning LNK4075: 忽略“/INCREMENTAL”(由于“/LTCG”规范)
1>atlsd.lib(atlfuncs.obj) : error LNK2005: "void __stdcall ATL::AtlWinModuleAddCreateWndData(struct ATL::_ATL_WIN_MODULE70 *,struct ATL::_AtlCreateWndData *,void *)" (?AtlWinModuleAddCreateWndData@ATL@@YGXPAU_ATL_WIN_MODULE70@1@PAU_AtlCreateWndData@1@PAX@Z) 已经在kwslib.lib(setting_hlp.obj) 中定义
1>atlsd.lib(atlfuncs.obj) : error LNK2005: "void * __stdcall ATL::AtlWinModuleExtractCreateWndData(struct ATL::_ATL_WIN_MODULE70 *)" (?AtlWinModuleExtractCreateWndData@ATL@@YGPAXPAU_ATL_WIN_MODULE70@1@@Z) 已经在kwslib.lib(setting_hlp.obj) 中定义
1>atlsd.lib(atltime.obj) : error LNK2005: "public: static class ATL::CTime __stdcall ATL::CTime::GetTickCount(void)" (?GetTickCount@CTime@ATL@@SG?AV12@XZ) 已经在kwslib.lib(KwsSetting.obj) 中定义
1>atlsd.lib(atltime.obj) : error LNK2005: "public: __thiscall ATL::CTime::CTime(__int64)" (??0CTime@ATL@@QAE@_J@Z) 已经在kwslib.lib(KwsSetting.obj) 中定义
1>atlsd.lib(atltime.obj) : error LNK2005: "public: __int64 __thiscall ATL::CTime::GetTime(void)const " (?GetTime@CTime@ATL@@QBE_JXZ) 已经在kwslib.lib(KwsSetting.obj) 中定义
1>LINK : fatal error LNK1104: 无法打开文件“lib_jsonMT.lib”</span>
-----
 
我们得把commonlib.sln编译成release的。我选择的是Release ModUrl
 
报错:
 
 
1>d:\自己的经验总结\自己的经验总结\金山开源\oss\pcmanager\src\publish\common/registrywow.h(18) : error C2146: 语法错误: 缺少“;”(在标识符“OpenKeyEx”的前面)
1>d:\自己的经验总结\自己的经验总结\金山开源\oss\pcmanager\src\publish\common/registrywow.h(18) : error C4430: 缺少类型说明符- 假定为int。注意: C++ 不支持默认int
1>d:\自己的经验总结\自己的经验总结\金山开源\oss\pcmanager\src\publish\common/registrywow.h(19) : error C4430: 缺少类型说明符- 假定为int。注意: C++ 不支持默认int
1>d:\自己的经验总结\自己的经验总结\金山开源\oss\pcmanager\src\publish\common/registrywow.h(19) : warning C4183: “OpenKeyEx”: 缺少返回类型;假定为返回“int”的成员函数
1>d:\自己的经验总结\自己的经验总结\金山开源\oss\pcmanager\src\publish\common/registrywow.h(39) : error C2146: 语法错误: 缺少“;”(在标识符“OpenKeyEx”的前面)
1>d:\自己的经验总结\自己的经验总结\金山开源\oss\pcmanager\src\publish\common/registrywow.h(39) : error C4430: 缺少类型说明符- 假定为int。注意: C++ 不支持默认int
1>d:\自己的经验总结\自己的经验总结\金山开源\oss\pcmanager\src\publish\common/registrywow.h(40) : error C4430: 缺少类型说明符- 假定为int。注意: C++ 不支持默认int
 
 
 
 
找到出错的文件(双击就可以定位到这个文件了)
添加如下代码: 
 
// Support Windows SDK v5.0
#ifndef LSTATUS
typedef __success(return==ERROR_SUCCESS) LONG LSTATUS;
#endif
 
编译commonlib.sln 提示Wow64FsEnableRedirection 好多 未知标识符?
找到出错的文件(双击就可以定位到这个文件了)和上一个的在同一个文件
添加如下代码:
 
 
WINBASEAPI
BOOLEAN
WINAPI
Wow64EnableWow64FsRedirection (
                               __in BOOLEAN Wow64FsEnableRedirection
                               );
 
WINBASEAPI
BOOL
WINAPI
Wow64DisableWow64FsRedirection (
                                __out PVOID *OldValue
                                );
 
WINBASEAPI
BOOL
WINAPI
Wow64RevertWow64FsRedirection (
                               __in PVOID OlValue
                               );
提示SHCreateDirectory 不知道是啥?
在所提示的位置上#include <shlobj.h>   把这个声明给他加进来就可以了。

 
5、编译主界面.
 
\oss\ksm\sln\KSafeMain.sln 没有出现错误.
 
 \
 
==================================================================================================================
 
经过一天的测试,使用Visual C++ 2005 SP1 + ATL+WTL编译,测试结果为:
2012年3月27日发布的代码:sln目录下的19个sln(不含2个子目录下的),有11个可以正常编译、5个无效(项目已被删除)、4个编译有问题,
 
11个编译通过的为commonlib.sln 、avcenter.sln、bkver.sln、、kclear.sln、kmsspeed.sln、kprocesslib.lib、lang.sln、softmgr.sln、sysopt.sln,
 
netmon.sln,(其中FwProxy若是DEBUG的那么得把Relaese下的包含文件复制过来。netmon只能编译为release版本,DEBUG的会提示
 
 
<span style="color:#ff0000;">1>atlsd.lib(atltime.obj) : error LNK2005: "public: static class ATL::CTime __stdcall ATL::CTime::GetTickCount(void)" (?GetTickCount@CTime@ATL@@SG?AV12@XZ) 已经在kwslibmd.lib(KwsSettingOld.obj) 中定义
1>atlsd.lib(atltime.obj) : error LNK2005: "public: __thiscall ATL::CTime::CTime(__int64)" (??0CTime@ATL@@QAE@_J@Z) 已经在kwslibmd.lib(KwsSettingOld.obj) 中定义
1>atlsd.lib(atltime.obj) : error LNK2005: "public: __int64 __thiscall ATL::CTime::GetTime(void)const " (?GetTime@CTime@ATL@@QBE_JXZ) 已经在kwslibmd.lib(KwsSettingOld.obj) 中定义
1>LINK : warning LNK4098: 默认库“MSVCRT”与其他库的使用冲突;请使用/NODEFAULTLIB:library</span>
)
 
vulfix.sln(只能在Release版本下编译通过,在DEBGU版本下提示: www.2cto.com
 
 
<span style="color:#cc0000;">1>vulfixlib.lib(ImplVulfix.obj) : error LNK2019: 无法解析的外部符号"unsigned short __cdecl GetLangID(void)" (?GetLangID@@YAGXZ),该符号在函数"public: virtual long __thiscall CImplVulfix::Scan(unsigned long)" (?Scan@CImplVulfix@@UAEJK@Z) 中被引用

1>vulfixlib.lib(EnvUtils.obj) : error LNK2001: 无法解析的外部符号"unsigned short __cdecl GetLangID(void)" (?GetLangID@@YAGXZ)
1>vulfixlib.lib(LeakDB.obj) : error LNK2001: 无法解析的外部符号"unsigned short __cdecl GetLangID(void)" (?GetLangID@@YAGXZ)
1>vulfixlib.lib(ImplVulfix.obj) : error LNK2019: 无法解析的外部符号"int __cdecl ParseDateString(wchar_t const *,int &,int &,int &)" (?ParseDateString@@YAHPB_WAAH11@Z),该符号在函数"public: virtual int __thiscall CImplVulfix::ExpressScanSystem(void)" (?ExpressScanSystem@CImplVulfix@@UAEHXZ) 中被引用
1>vulfixlib.lib(LeakDB.obj) : error LNK2001: 无法解析的外部符号"int __cdecl ParseDateString(wchar_t const *,int &,int &,int &)" (?ParseDateString@@YAHPB_WAAH11@Z)
1>vulfixlib.lib(ImplRepairVul.obj) : error LNK2019: 无法解析的外部符号"public: __thiscall CLocalFileDownload::~CLocalFileDownload(void)" (??1CLocalFileDownload@@QAE@XZ),该符号在函数__unwindfunclet$??0TDownloadAndInstallInfo@CImplRepairVul@@QAE@XZ$0 中被引用
1>vulfixlib.lib(ImplRepairVul.obj) : error LNK2019: 无法解析的外部符号"public: __thiscall CLocalFileDownload::CLocalFileDownload(void)" (??0CLocalFileDownload@@QAE@XZ),该符号在函数"public: __thiscall CImplRepairVul::TDownloadAndInstallInfo::TDownloadAndInstallInfo(void)" (??0TDownloadAndInstallInfo@CImplRepairVul@@QAE@XZ) 中被引用
1>vulfixlib.lib(ImplRepairVul.obj) : error LNK2019: 无法解析的外部符号"int __cdecl CreateDirectoryNested(wchar_t const *)" (?CreateDirectoryNested@@YAHPB_W@Z),该符号在函数"public: virtual long __thiscall CImplRepairVul::Repair(wchar_t const *,wchar_t const *,unsigned long)" (?Repair@CImplRepairVul@@UAEJPB_W0K@Z) 中被引用
1>vulfixlib.lib(LibPkgUpk.obj) : error LNK2001: 无法解析的外部符号"int __cdecl CreateDirectoryNested(wchar_t const *)" </span>
 
 
5个无效的为ksafeinstaller.sln、onekeyinstall.sln、PluginEngine.sln、safemon.sln,KSafeMain.sln、
 
4个有问题的为
 
ksafe.sln、
 
提示下面的错误:
 
 
1>scanlib.lib(klogic.obj) : 找到MSIL .netmodule 或使用/GL 编译的模块;正在使用/LTCG 重新启动链接;将/LTCG 添加到链接命令行以改进链接器性能
1>LINK : warning LNK4075: 忽略“/INCREMENTAL”(由于“/LTCG”规范)
1>atlsd.lib(atltime.obj) : error LNK2005: "public: static class ATL::CTime __stdcall ATL::CTime::GetTickCount(void)" (?GetTickCount@CTime@ATL@@SG?AV12@XZ) 已经在kwslib.lib(KwsSetting.obj) 中定义
1>atlsd.lib(atltime.obj) : error LNK2005: "public: __thiscall ATL::CTime::CTime(__int64)" (??0CTime@ATL@@QAE@_J@Z) 已经在kwslib.lib(KwsSetting.obj) 中定义
1>atlsd.lib(atltime.obj) : error LNK2005: "public: __int64 __thiscall ATL::CTime::GetTime(void)const " (?GetTime@CTime@ATL@@QBE_JXZ) 已经在kwslib.lib(KwsSetting.obj) 中定义
1>LINK : fatal error LNK1104: 无法打开文件“lib_jsonMT.lib”
 
 
 
KSafeMain.sln、
 
ksafeperfopt.sln
 
提示
 
error MIDL2025 : syntax error : expecting ] or , near
"annotation"
Include\unknwn.idl(108) : error MIDL2026 : cannot recover from earlier syntax errors;
 
参考: http://blog.csdn.net/immcss/article/details/2581604
 
在工具->选项->VC++目录中执行文件添加
 
C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin解决,
 
但又提示下面错误
 
1>LINK : fatal error LNK1104: 无法打开文件“lib_jsonMT.lib”
 
 
 
ksafesvc.sln
 
1>LINK : fatal error LNK1104: 无法打开文件“lib_jsonMT.lib”
 
=========================================================================================================================
 
总的来说对金山是失望的,打着开源的旗号,可是开源关没有完全,且编译都会出现问题。
 
与外国的开源软件相比,确实还有差距,希望改进.
 
不管了,虽然不能运行,但有些东西还是有帮助的.这里还是要感谢金山公司.

转载请标明是引用于http://blog.csdn.net/chenyujing1234
 
 
 就爱阅读www.92to.com网友整理上传,为您提供最全的知识大全,期待您的分享,转载请注明出处。
金山卫士是一款由北京金山网络科技有限公司出品的查杀木马能力强、检测漏洞快、体积小巧的免费安全软件。




软件推荐:      



相关软件

2345安全卫士最新官方版

2345安全卫士官方版 | 45.34MB

2345安全卫士官方版

2345安全卫士是集电脑体检、木马查杀、垃圾清理、修复系统漏洞、系统加速、软件管理等功能为一体的电脑安全管理的软件.提供全方位检测,用户可以通过检测结果快速了解自己的电脑并且对电脑进行优化..

360杀毒软件官方正式版

360杀毒软件官方正式版 | 35.10MB

360杀毒软件官方正式版

360杀毒具有查杀率高、资源占用少、升级迅速等优点。零广告、零打扰、零胁迫,一键扫描,快速、全面地诊断系统安全状况和健康程度,并进行精准修复,带来安全、专业、有效、新颖的查杀防护体验...

360安全卫士最新版下载

360安全卫士最新版下载 | 50.3MB

360安全卫士最新版下载

360安全卫士是一款由奇虎360公司推出的功能强、效果好、受用户欢迎的安全杀毒软件。360安全卫士拥有查杀木马、清理插件、修复漏洞、电脑体检、电脑救援、保护隐私,电脑专家,清理垃圾,清理痕迹...

QQ电脑管家官方正式版

QQ电脑管家官方正式版 | 24.2MB

QQ电脑管家官方正式版

腾讯电脑管家(Tencent PC Manager/原名QQ电脑管家)是腾讯公司推出的免费安全软件。拥有云查杀木马,系统加速,漏洞修复,实时防护,网速保护,电脑诊所,健康小助手...

金山毒霸2018最新版下载

金山毒霸2018下载 | 37MB

金山毒霸2018最新版下载

金山毒霸融合了启发式搜索、代码分析、虚拟机查毒等技术。经业界证明成熟可靠的反病毒技术,以及丰富的经验,使其在查杀病毒种类、查杀病毒速度、未知病毒防治等多方面达到世界先进水平...

猎豹清理大师官方版下载

猎豹清理大师下载 | 47.4MB

猎豹清理大师官方版下载

猎豹清理大师(原金山清理大师)是由金山网络开发的智能手机应用。它可以清理智能手机上的应用缓存、残余程序文件、历史痕迹以及应用程序安装包...