编译官方eMule v0.49攻略

作者: admin 分类: eMule 发布时间: 2013-05-16 13:34 ė3,088 浏览数 61条评论
文章转自王牌软件
站长推荐: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

 

二:编译前整理工作

  1. 解压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中。

  1. 解压crypto51.zip到/eMule0.49c-Sources/crypto51

该工程默认为VC6打开,复制cryptlib.dsp为cryptlib_vc71.dsp。使用VS2003打开,讲提示是否升级,同意后点击保存工程会生成:cryptlib_vc71.vcproj

  1. 解压ResizableLib_1_3.zip到/eMule0.49c-Sources/ResizableLib

该工程默认为VC6打开,使用上述方法生成:ResizableLib_vc71.vcproj

  1. 解压libpng-1.2.40.tar.gz到/eMule0.49c-Sources/libpng

默认即有:/libpng/projects/visualc71/libpng.vcproj

  1. 解压zlib-1.2.3.tar.gz中的文件到已存在的目录:/eMule0.49c-Sources/zlib

 

三:开始编译工作

  1. 此时VS2003打开emule_vc71-all.sln将看到比较完整的工程文件夹。根据依赖关系逐个编译。先编译依赖库,再编译eMule。
  2. 编译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();}

  1. 编译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

 

  1. 编译eMule提示无法找到wmsdk.h

// Uncomment the following line if you get compile errors due to missing ‘wmsdk.h’

#undef HAVE_WMSDK_H

  1. 编译eMule提示没有找到wmvcore.lib

从网上下载一个,这个库是标准DirectShow的组件

  1. 编译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

  1. 编译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

  1. 修改链接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)编译。

如此可以避免很多链接冲突问题。



只回答业务咨询点击这里给我发消息 点击这里给我发消息

王牌软件,兼职软件设计,软件修改,毕业设计。

本文出自 王牌软件,转载时请注明出处及相应链接。

本文永久链接: http://www.softwareace.cn/?p=426

一条评论

  1. admin 2013 年 5 月 16 日 下午 2:01 回复

    #undef HAVE_WIN7_SDK_H

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">


Ɣ回顶部

无觅相关文章插件,快速提升流量