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.\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引用等。
vs2008编译FileZilla客户端源码的更多相关文章
- FileZilla客户端源码解析
FileZilla客户端源码解析 FTP是TCP/IP协议组的协议,有指令通路和数据通路两条通道.一般来说,FTP标准命令TCP端口号是21,Port方式数据传输端口是20. FileZilla作为p ...
- vs2008编译FileZilla服务端源码
vs2008编译FileZilla服务端源码 FileZilla服务端下载地址:https://download.filezilla-project.org/server/.FileZilla服务端源 ...
- 转载-FileZilla Server源码分析(1)
FileZilla Server源码分析(1) 分类: VC 2012-03-27 17:32 2363人阅读 评论(0) 收藏 举报 serversocketftp服务器usersockets工作 ...
- 【原】storm源码之mac os x编译twitter storm源码
twitter storm是由backtype公司创始人nathanmarz一手研发和开源的流计算(实时计算)框架,堪称实时计算领域的hadoop.nathanmarz也是在mac os x环境下开发 ...
- Atitit.反编译apk android源码以及防止反编译apk
Atitit.反编译apk android源码以及防止反编译apk 1.1. Tool apk逆向助手1 1.2. 二.使用dex2jar + jd-gui 得到apk的java源码1 1.3. 用 ...
- swift实现饭否应用客户端源码
swift 版 iOS 饭否客户端 源码下载:http://code.662p.com/view/13318.html 饭否是中国大陆地区第一家提供微博服务的网站,被称为中国版Twitter.用户可通 ...
- msvc2013编译qt5.6源码
1.回顾 说起到qt的编译,真是领人痛心啊,不仅编译选项繁多,而且编译时间比较久,总是能使想编译qt源码的人望而却步,呵呵...我就是其中一个,不知道从什么时候开始就想着把qt的源码编译一下,也尝试过 ...
- android版高仿淘宝客户端源码V2.3
android版高仿淘宝客户端源码V2.3,这个版本我已经更新到2.3了,源码也上传到源码天堂那里了,大家可以看一下吧,该应用实现了我们常用的购物功能了,也就是在手机上进行网购的流程的,如查看产品(浏 ...
- Ubuntu 下载 & 编译 Android5.1 源码
ustc & tsinghua android srchttps://lug.ustc.edu.cn/wiki/mirrors/help/aosphttps://mirrors.tuna.ts ...
随机推荐
- ON COMMIT PRESERVE ROWS
定义声明式全局临时表的每个会话拥有自己的独特的临时表描述.当会话终止时,表行和临时表描述均会被删除. 有如下选项,可控制commit后临时表的状态: ON COMMIT DELETE ROWS:在执行 ...
- css ie6最小高度问题
最小高度问题: 这个最小高度 min-height:的问题,因为min-height:只在IE7\FF中起作用.至于这个IE6死活就是不认.而我这个页面又必需得用这个最小高度来定. 但头痛的是I ...
- hdu1042
#include"stdio.h" #include"stdlib.h" #include"string.h" #define N 1000 ...
- Web window.print() 打印
web打印 window.print() 我只给出比较有效的,方便的打印方法,有些WEB打印是调用ActiveX控件的,这样就需要用户去修改自己IE浏览器的Internet选项里的安全里的Active ...
- Vue.js教程
https://aotu.io/notes/2016/10/13/vue2/?o2src=juejin&o2layout=compat
- Ajax与CustomErrors的尴尬
在ASP.NET程序中,为了给用户显示友好的错误信息,通常在web.config中进行如下的设置: <customErrors mode="RemoteOnly" defau ...
- Thinkphp5 设置日志
database.php 'debug' => false, application/config.php 'log' => [ // 日志记录方式,支持 file socket 'typ ...
- find用法积累
查找目录下的所有文件中是否含有某个字符串 find .|xargs grep -ri "IBM" 查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名 find .|xar ...
- Linux scp命令
语法 scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P p ...
- 【JS】倒计时
描述: 先要链接jquery.js,这样写法可以直接放JS文件运行. //放在图片里定位的倒计时 //顶图里面定位才使用的代码 document.writeln("<style> ...