vs2008编译FileZilla客户端源码

时间:2022-09-26 08:54:56

  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.\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-.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.\lib
E:\codeEnvir\sdk\wxMSW-2.8.\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。

vs2008编译FileZilla客户端源码

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工程,报错误

>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!

  调试界面如下:

vs2008编译FileZilla客户端源码

  编译FileZilla客户端比编译服务端复杂很多,客户端的依赖库,除了Tinyxml和sqlite外,别的都没有接触过。特别是wxWidgets,看了一些外文文章,才晓得编译和资源引用方法。比如在resources内加入wxWidgets引用等。