• 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.1in目录,输入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.27windows下的工程进行编译,但推荐直接使用lib文件夹自带的lib和dll。我用libidn-1.27windows下的工程编译lib,后经dumpbin /exports libidn.lib测试,没有导出任何函数。此问题不在本章范围内,后续再研究。

    2  编译 engine

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

    E:codeEnvirsdklibidn-1.27lib
    E:codeEnvirsdkSQlite3
    E:codeEnvirsdkGnuTLS-2.10.1include
    $(WXWIN)libvc_lib
    ealease-unicodemswu
    $(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:codeEnvirsdklibidn-1.27windowslib
    E:codeEnvirsdkSQlite3Release
    E:codeEnvirsdkGnuTLS-2.10.1lib
    E:codeEnvirsdkwxMSW-2.8.12libvc_lib
    ealease-unicode

       其中,E:codeEnvirsdkwxMSW-2.8.12libvc_lib ealease-unicode,release-unicode是我自己添加的文件夹,包含了wxWidgets原本生成在vc_lib下的release+unicode的lib文件。

      编译engine工程,在filezilla-3.6.0.1srclib文件夹下生成engine_unicode.lib。

    3  编译FileZilla

       仿照engine的配置FileZilla工程,此外,由于FileZilla使用wxWidgets的资源编辑器而非vs2008的资源编辑器,应配置资源属性,如下:

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

    $(WXWIN)libvc_lib
    ealease-unicodemswu
    $(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.27windowslib下的libidn.dll拷贝到filezilla-3.6.0.1srcin。

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

      提示没有找到fzsftp.exe文件。该文件不在FileZilla的客户端源码内,从FileZilla官网下载客户端安装包,解压后将fzsftp.exe拷贝到filezilla-3.6.0.1srcin(忽略该问题也可以调试

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

      右键我的电脑->高级系统设置->环境变量->系统变量,新建系统变量“FZ_DATADIR”,路径为src同目录的interface文件夹,或者filezilla安装位置的资源文件夹。

      再次启动调试,OK!

      调试界面如下:

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

  • 相关阅读:
    Tesseract-OCR
    chrome浏览器插件推荐
    安装配置sublime Text 3 快捷键方式
    远程桌面与远程控制
    一个C#的XML数据库访问类
    WPF小程序:贪吃蛇
    恐惧源于一知半解
    8条佛曰 66句禅语
    自动开机 双网卡网络唤醒
    C#,Java,C++中的finally关键字
  • 原文地址:https://www.cnblogs.com/hgwang/p/6150420.html
Copyright © 2020-2023  润新知