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。

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!

  调试界面如下:

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

最新文章

  1. ISS部署网站--未能写入输出文件“c:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root ……
  2. cocos的helloworld写法
  3. cygwin下载指南(转)
  4. javascript 的事件--阻止冒泡
  5. Mongodb For Windows
  6. linux 解压命令大全
  7. mysql之select(一)
  8. elasticsearch-head 的搭建
  9. bzoj 2959 长跑(LCT+BCC+并查集)
  10. 【HDOJ】4351 Digital root
  11. Xcode常用快捷键总结
  12. Android eclipse - aapt.exe has stopped working.
  13. Android Studio 没有assets目录的问题
  14. Android自定义View实战(SlideTab-可滑动的选择器)
  15. 熟悉activemq的初步试用
  16. WEB通知和React Native之即时通讯(iOS Android)
  17. MYSQL5.7脚本运行时出现[Warning] Using a password on the command line interface can be insecure
  18. 新年放大招:Github 私库免费了!
  19. TJOI2011书架(dp)
  20. Maven打包将所有的依赖都打入

热门文章

  1. 如何调用在$(function(){ //内部函数代码 });
  2. javadataAbout stack and heap in JAVA(2)
  3. Virtualbox中的Linux:未能加载虚拟光驱 VBoxsGuestAdditions.iso到虚拟电脑
  4. Maven配置插件跳过测试代码的编译和运行
  5. Crystal Report 纵向排列,多列格式化
  6. trove taskmanger api
  7. sellenium页面元素的定位方法
  8. CPU和GPU的区别
  9. Xcode插件推荐
  10. jquery 图片遮罩 坠落遮挡效果