如何在 Visual C++.NET 2003 下編譯eMule

作者:XCyber
日期:2004-10-10
e-mail:[email protected]

編譯環境:Microsoft Visual C++ .NET 2003 (v7.0)
eMule版本:0.44b

[1]下載源代碼和支持庫
1.下載eMule v0.44b 源代碼
   
http://www.emule-project.com/
2.Crypto++ v5.1
   
http://www.eskimo.com/~weidai/cryptlib.html
3.zlib v1.2.1
   
http://www.gzip.org/zlib/
4.id3lib v3.8.3
   
http://sourceforge.net/projects/id3lib/
5.libpng
   
http://www.libpng.org/pub/png/libpng.html
    或
   
http://sourceforge.net/projects/libpng/
6.ResizableLib 1.3
   
http://sourceforge.net/projects/resizablelib/

[2]編譯eMule所需要的庫。
注意:編譯的所有庫工程的Run-Time Libaray都統一用用Multi-threaded (/MT)

1.Crypto++ v5.1
    對於VC++.NET 2003編譯器,我們要對源代碼做以下修改:

在文件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();}
然後編譯Release版本,把生成的cryptlib.lib和頭文件放到eMule下的crypto51。

2.ResizableLib 1.3
    編譯成Release Static版本,把ResizableLib.lib和頭文件拷到eMule下的ResizableLib。

3.zlib v1.2.1
    首先,打開zlib/Makefile.msc文件,把
      CFLAGS  = -nologo -MD -O2 $(LOC)
    改爲
      CFLAGS  = -nologo -MT -O2 $(LOC)
    統一使用/MT 運行時庫。
   
    然後,在zlib/下運行nmake /a /f win32/Makefile.msc。(運行nmake前先運行VS.NET2003下vc7/bin/vcvars32.bat註冊編譯環境變量),把生成的zlib.lib和頭文件放到eMule下的zlib。

4.libpng
    進入png/projects/visualc6打開libpng工程,在libpng工程裏添加之前生成的zlib頭文件和庫文件路徑,編譯成LIB ASM Release,然後把libpng.lib改名爲png.lib,包括頭文件一起拷到eMule下的png。

5.id3lib v3.8.3
    解壓id3lib v3.8.3,把config.h.win32改爲config.h,然後進入解壓後目錄下的libprj並打開工程文件,去掉id3lib v3.8.3自帶zlib庫的頭文件路徑,添加之前編譯好zlib庫的頭文件路徑,編譯Release版本。把生成的id3lib.lib和頭文件拷到eMule下的id3。

6.CxImage   進入eMule/CxImage,打開工程文件,設置正確的png和zlib的庫文件和頭文件路徑,然後編譯Release版本,把生成的CxImage.lib拷到eMule/CxImage下。

[3]編譯eMule
    打開DialogMinTrayBtn.cpp把下面的
      #if 0
      // define this to use that source file as template
      #define TEMPLATE template <class BASE>
      #else
      // define this to instantiate functions for class 'BASE' right in this CPP module
      #define TEMPLATE
      #define BASE  CResizableDialog
      #endif   
    改爲
      #if 0
      // define this to use that source file as template
      #define TEMPLATE template <class BASE>
      #else
      // define this to instantiate functions for class 'BASE' right in this CPP module
      #define TEMPLATE        template <>
      #define BASE  CResizableDialog
      #endif   
    檢查一下所需要的頭文件目錄和庫文件是否正確,然後就可以編譯Release版本的eMule了。如果所有eMule的支持庫都用/MT編譯的話,應該鏈接不會出什麼問題,如果還是出現運行時庫符號衝突,可以在鏈接參數裏忽略某些運行時庫。

    官方的eMule編譯通過了,接下來我們可以幹嘛呢?如果你是牛人,又覺得現在的eMule不合自己口味,那你大可以修改它,但是如果你想發佈你自己的eMule版本,別忘了把源代碼也一起發佈喔,因爲eMule是受到GNU保護的。有點廢話了,牛人又怎麼會看這篇文章啦~~~~哈哈~~eMule的代碼確實寫得很優秀,是一個難得的學習機會。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章