vs2008編譯FileZilla客戶端源碼


  vs2008編譯FileZilla客戶端源碼

  下載FileZilla客戶端源碼,下載地址https://download.filezilla-project.org/。

  FileZilla客戶端解決方案包含3個工程,分別是:

  engine,核心服務,編譯后在lib文件夾下生成engine_unicode.lib,依賴4個庫wxWidgets、GnuTLS、sqlite3、GNU IDN Library - Libidn。

  FileZilla,界面程序,編譯后生成exe文件,依賴4個庫wxWidgets、GnuTLS、sqlite3、GNU IDN Library - Libidn。

  tinyxml,一個輕量級的開源xml解析器,編譯后生成tinyxml.lib,關於tinyxml的用法,查看我的另外一篇文章http://www.cnblogs.com/hgwang/p/5833638.html。

  本文介紹一下FileZilla客戶端release編譯方法(debug類似)。

1  編譯依賴庫wxWidgets、GnuTLS、sqlite3、GNU IDN Library - Libidn

  FileZilla的3個工程全部都是unicode編碼,以下4個依賴庫也應當使用unicode編譯。

1.1  GUI界面庫wxWidgets

  wxWidgets編譯比較復雜,查看我的另外一篇文章,http://www.cnblogs.com/hgwang/p/6163989.html。

1.2  GnuTLS

  GnuTLS 是一個安全通訊庫,實現了 SSL、TLS 和 DTLS 協議和相關技術。提供了簡單的 C 語言編程接口用來訪問這些安全通訊協議,提供解析和讀寫 X.509、PKCS #12、OpenPGP 和其他相關結構。特點是可移植性和高效。下載地址http://josefsson.org/gnutls4win/,安裝文件內帶有source code,默認為不安裝。但這里並不需要。用vs2008 command prompt進入GnuTLS-2.10.1\bin目錄,輸入lib /def:libgnutls-26.def,將def文件導出成lib。將頭文件和生成的lib路徑加入filezilla工程屬性。

1.3  sqlite3

  下載sqlite3源文件,https://www.sqlite.org/。編譯后加入頭文件和lib路徑。

1. 4  下載GNU IDN Library - Libidn

  下載地址。編譯windows文件夾下的項目,將windows include文件夾下的內容拷貝到lib文件夾中,加入頭文件引用。

  也可以用libidn-1.27\windows下的工程進行編譯,但推薦直接使用lib文件夾自帶的lib和dll。我用libidn-1.27\windows下的工程編譯lib,后經dumpbin /exports libidn.lib測試,沒有導出任何函數。此問題不在本章范圍內,后續再研究。

2  編譯 engine

   engine工程屬性->C/C++->General->Additional Include Directories,包含以下文件路徑(需要自行修改)

E:\codeEnvir\sdk\libidn-1.27\lib
E:\codeEnvir\sdk\SQlite3
E:\codeEnvir\sdk\GnuTLS-2.10.1\include
$(WXWIN)\lib\vc_lib\realease-unicode\mswu
$(WXWIN)\include
.
../include/

  WXWIN是wxWidgets路徑的系統變量,在http://www.cnblogs.com/hgwang/p/6163989.html有介紹。

  engine工程屬性->Librarian->General->Additional Dependencies,包含以下lib文件:

wxzlib.lib
wxtiff.lib
wxregexu.lib
wxpng.lib
wxmsw28u.lib
wxjpeg.lib
wxexpat.lib
libgnutls-26.lib
sqlite3.lib
libidn.lib

  engine工程屬性->Librarian->General->Additional Library Directories,包含以下lib文件路徑:

E:\codeEnvir\sdk\libidn-1.27\windows\lib
E:\codeEnvir\sdk\SQlite3\Release
E:\codeEnvir\sdk\GnuTLS-2.10.1\lib
E:\codeEnvir\sdk\wxMSW-2.8.12\lib\vc_lib\realease-unicode

 

   其中,E:\codeEnvir\sdk\wxMSW-2.8.12\lib\vc_lib\realease-unicode,release-unicode是我自己添加的文件夾,包含了wxWidgets原本生成在vc_lib下的release+unicode的lib文件。

  編譯engine工程,在filezilla-3.6.0.1\src\lib文件夾下生成engine_unicode.lib。

3  編譯FileZilla

   仿照engine的配置FileZilla工程,此外,由於FileZilla使用wxWidgets的資源編輯器而非vs2008的資源編輯器,應配置資源屬性,如下:

  FileZilla工程屬性->Resources->Additional Include Directories,加入

$(WXWIN)\lib\vc_lib\realease-unicode\mswu
$(WXWIN)\include

4  編譯調錯  

  1:編譯CAskSavePasswordDialog::Run出錯解決方法:

  編譯FileZilla工程,報錯誤

1>quickconnectbar.obj : error LNK2001: unresolved external symbol "public: static bool __cdecl CAskSavePasswordDialog::Run(class wxWindow *)" (?Run@CAskSavePasswordDialog@@SA_NPAVwxWindow@@@Z)

  unresolved external symbol   CAskSavePasswordDialog::Run。經對比,發現FileZilla工程缺少CAskSavePasswordDialog的h和cpp文件,加入 AskSavePasswordDialog的h和cpp文件。

  2:運行提示缺少libidn.dll

  啟動調試,提示缺少libidn.dll。將libidn-1.27\windows\lib下的libidn.dll拷貝到filezilla-3.6.0.1\src\bin。

  3:運行提示找不到fzsftp.exe

  提示沒有找到fzsftp.exe文件。該文件不在FileZilla的客戶端源碼內,從FileZilla官網下載客戶端安裝包,解壓后將fzsftp.exe拷貝到filezilla-3.6.0.1\src\bin(忽略該問題也可以調試

  4:提示找不到resources資源文件

  右鍵我的電腦->高級系統設置->環境變量->系統變量,新建系統變量“FZ_DATADIR”,路徑為src同目錄的interface文件夾,或者filezilla安裝位置的資源文件夾。

  再次啟動調試,OK!

  調試界面如下:

  編譯FileZilla客戶端比編譯服務端復雜很多,客戶端的依賴庫,除了Tinyxml和sqlite外,別的都沒有接觸過。特別是wxWidgets,看了一些外文文章,才曉得編譯和資源引用方法。比如在resources內加入wxWidgets引用等。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM