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客户端源码的更多相关文章

  1. FileZilla客户端源码解析

    FileZilla客户端源码解析 FTP是TCP/IP协议组的协议,有指令通路和数据通路两条通道.一般来说,FTP标准命令TCP端口号是21,Port方式数据传输端口是20. FileZilla作为p ...

  2. vs2008编译FileZilla服务端源码

    vs2008编译FileZilla服务端源码 FileZilla服务端下载地址:https://download.filezilla-project.org/server/.FileZilla服务端源 ...

  3. 转载-FileZilla Server源码分析(1)

    FileZilla Server源码分析(1) 分类: VC 2012-03-27 17:32 2363人阅读 评论(0) 收藏 举报 serversocketftp服务器usersockets工作 ...

  4. 【原】storm源码之mac os x编译twitter storm源码

    twitter storm是由backtype公司创始人nathanmarz一手研发和开源的流计算(实时计算)框架,堪称实时计算领域的hadoop.nathanmarz也是在mac os x环境下开发 ...

  5. Atitit.反编译apk android源码以及防止反编译apk

    Atitit.反编译apk android源码以及防止反编译apk 1.1. Tool  apk逆向助手1 1.2. 二.使用dex2jar + jd-gui 得到apk的java源码1 1.3. 用 ...

  6. swift实现饭否应用客户端源码

    swift 版 iOS 饭否客户端 源码下载:http://code.662p.com/view/13318.html 饭否是中国大陆地区第一家提供微博服务的网站,被称为中国版Twitter.用户可通 ...

  7. msvc2013编译qt5.6源码

    1.回顾 说起到qt的编译,真是领人痛心啊,不仅编译选项繁多,而且编译时间比较久,总是能使想编译qt源码的人望而却步,呵呵...我就是其中一个,不知道从什么时候开始就想着把qt的源码编译一下,也尝试过 ...

  8. android版高仿淘宝客户端源码V2.3

    android版高仿淘宝客户端源码V2.3,这个版本我已经更新到2.3了,源码也上传到源码天堂那里了,大家可以看一下吧,该应用实现了我们常用的购物功能了,也就是在手机上进行网购的流程的,如查看产品(浏 ...

  9. Ubuntu 下载 & 编译 Android5.1 源码

    ustc & tsinghua android srchttps://lug.ustc.edu.cn/wiki/mirrors/help/aosphttps://mirrors.tuna.ts ...

随机推荐

  1. oracle 12c 学习系列(1)–12c初体验

    详见原文博客链接地址: oracle 12c 学习系列(1)–12c初体验

  2. react+redux渲染性能优化原理

    大家都知道,react的一个痛点就是非父子关系的组件之间的通信,其官方文档对此也并不避讳: For communication between two components that don't ha ...

  3. JAVA线程间的状态转换

    线程间的状态转换:  1. 新建(new):新创建了一个线程对象. 2. 可运行(runnable):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法.该状态的线程位于可运 ...

  4. 本地Eclipse连接HDFS进行简单的文件操作

    昨天总结了一点自己在搭建Hadoop完全分布式环境过程中遇到的几个小问题以及解决方案,今天在搭建成功的环境中进行了简单的文件操作,包括:文件目录的创建.文件的创建.本地文件的上传.文件的重命名.文件的 ...

  5. java基础练习 10

    import java.util.Scanner; public class Tenth { /*有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数*/ public stati ...

  6. vue组件,撸第一个

    实现此例您可以学到: vue-cli的基本应用 父组件如何向子组件传递值 单文件组件如何引入scss v-on和v-for的基础应用 源码下载 一.搭建vue开发环境 更换镜像到cnpmnpm ins ...

  7. MySQL基础知识2

  8. 【C#】Send data between applications

    This sample shows how to send data between different applications, including object data——transform ...

  9. jQuery 之玩转 checkbox

    <!DOCTYPE html> <html> <head> <title></title> <meta charset="u ...

  10. JavaEE XML DOM创建

    DOM创建XML @author ixenos 1.思路: 先封装构建一颗DOM树,然后将DOM树转换成XML文件 2.三种写DOM树到XML文件的方式: 1)使用DOM(或DOM4J.JDOM) 2 ...