编译官方eMule v0.49攻略
站长推荐:NSetup一键部署软件
一键式完成美化安装包制作,自动增量升级,数据统计,数字签名。应对各种复杂场景,脚本模块化拆分,常规复杂的脚本代码,图形化设置。无需专业的研发经验,轻松完成项目部署。(www.nsetup.cn)
备注:编译环境Microsoft Visual C++ .NET 7.1,编译版本为官方eMule v0.49版本,非国内VeryCD版本。
一:下载源代码和支持库 1.下载eMule v0.49 源代码
http://prdownloads.sourceforge.net/emule/eMule0.49c-Sources.zip 2.Crypto v5.1 http://www.cryptopp.com/crypto51.zip 3.zlib v1.2.3
http://www.zlib.net/zlib-1.2.3.tar.gz 4.ResizableLib 1.3 — A set of MFC classes to easily make resizable windows
http://sourceforge.net/projects/resizablelib/files/ResizableLib/1.3/ResizableLib_1_3.zip/download
5.libpng-1.2.40
http://prdownloads.sourceforge.net/libpng/libpng-1.2.40.tar.gz?download
二:编译前整理工作
- 解压eMule0.49c-Sources.zip到目录:eMule0.49c-Sources
可以看到eMule主工程目录在srchybrid文件夹, 另外该文件夹下已经携带了三个第三方库:EditBinX, id3lib, ReplaceVistaIcon和一个空壳库:zlib(只有工程文件,没有源文件)
使用VS.NET 2003直接打开srchybrid目录下的:emule_vc71-all.sln 会提示无法加载另外三个工程:
/crypto51/cryptlib_vc71.vcproj
/ResizableLib/ResizableLib_vc71.vcproj
/libpng/Projects/VisualC71/libpng.vcproj
因此需要把这些第三方工程导入到整个solution中。
- 解压crypto51.zip到/eMule0.49c-Sources/crypto51
该工程默认为VC6打开,复制cryptlib.dsp为cryptlib_vc71.dsp。使用VS2003打开,讲提示是否升级,同意后点击保存工程会生成:cryptlib_vc71.vcproj
- 解压ResizableLib_1_3.zip到/eMule0.49c-Sources/ResizableLib
该工程默认为VC6打开,使用上述方法生成:ResizableLib_vc71.vcproj
- 解压libpng-1.2.40.tar.gz到/eMule0.49c-Sources/libpng
默认即有:/libpng/projects/visualc71/libpng.vcproj
- 解压zlib-1.2.3.tar.gz中的文件到已存在的目录:/eMule0.49c-Sources/zlib
三:开始编译工作
- 此时VS2003打开emule_vc71-all.sln将看到比较完整的工程文件夹。根据依赖关系逐个编译。先编译依赖库,再编译eMule。
- 编译crypto
1.Crypto v5.1。对于VC .NET 2003编译器,我们要对源代码做以下修改: http://www.mscto.com
在文件integer.cpp中把 AllocatorBase<T>::pointer AlignedAllocator<T>::allocate(size_type n, const void *) 改为 CPP_TYPENAME AllocatorBase<T>::pointer AlignedAllocator<T>::allocate(size_type n, const void *)
在文件pubkey.h中把 template <class PK, class GP> class DL_KeyImpl : public PK { public: typedef GP GroupParameters;
OID GetAlgorithmID() const {return GetGroupParameters().GetAlgorithmID();} 改为 template <class PK, class GP, class O = OID> class DL_KeyImpl : public PK { public: typedef GP GroupParameters;
O GetAlgorithmID() const {return GetGroupParameters().GetAlgorithmID();}
- 编译eMule提示无法找到sapi.h,解决线索如下
// NOTE: If you get a compile error due to missing ‘sapi.h’, look at “emule_site_config.h” for further information.
// ‘sapi.h’ is not shipped with VS2003.
// Uncomment the following line if you get compile errors due to missing ‘sapi.h’
#undef HAVE_SAPI_H
- 编译eMule提示无法找到wmsdk.h
// Uncomment the following line if you get compile errors due to missing ‘wmsdk.h’
#undef HAVE_WMSDK_H
- 编译eMule提示没有找到wmvcore.lib
从网上下载一个,这个库是标准DirectShow的组件
- 编译eMule提示无法找到:../crypto51/release/cryptlib.lib
需要修改工程设置中的Linker->Input->Additional Dependencies
../crypto51/release/cryptlib.lib 修改为:
../crypto51/release/cryptlib_vc71.lib
../crypto51/debug/cryptlib.lib 修改为:
../crypto51/debug/cryptlib_vc71.lib
- 编译eMule提示没有找到ResizableLib.lib.
Solution中ResizableLib Project比较奇怪,编译环境需要选择
Lib Release/Debug 而不是:
Unicode Release/Debug
C运行时库选择Multi-threaded(/MT)
../ResizableLib/ReleaseUnicode/ResizableLib.lib 修改为:
../ResizableLib/Release/ResizableLib_vc71.lib
../ResizableLib/DebugUnicode/ResizableLib.lib 修改为:
../ResizableLib/Debug/ResizableLib_vc71.lib
- 修改链接C的运行时库
EditBinX: Single-threaded(/ML) à Multi-threaded(/MT)
Ligpng: Multi-threaded DLL(/MD) à Multi-threaded(/MT)
ReplaceVistaIcon: Single-threaded(/ML) à Multi-threaded(/MT)
如果编译Release版,则所有eMule的支持库都用/MT编译。
如果编译Debug版,则所有eMule的支持库都用Multi-threaded debug(/MTd)编译。
如此可以避免很多链接冲突问题。
学习日记,兼职软件设计,软件修改,毕业设计。
本文出自 学习日记,转载时请注明出处及相应链接。
本文永久链接: https://www.softwareace.cn/?p=426
一条评论
#undef HAVE_WIN7_SDK_H