【C++】Windows编译FileZilla Client

按照Compiling FileZilla 3 under Windows - FileZilla Wiki (filezilla-project.org)操作即可。

1.下载安装MSYS2

msys2-x86_64-20220118.exe

2.更新MSYS2

进入MSYS2 MinGW 64-bit shell,运行

pacman -Syu

重复退出shell,更新MSYS2。直到没有可更新的。

3.安装工具

进入MSYS2 MinGW 64-bit shell,运行

pacman -S autoconf automake libtool make mingw-w64-i686-toolchain mingw-w64-x86_64-toolchain git svn

解决在工具链中一些bug,就是修复windres工具缺少平台前缀的问题。

[ -f /mingw64/bin/x86_64-w64-mingw32-windres.exe ] || ln -s /mingw64/bin/windres.exe /mingw64/bin/x86_64-w64-mingw32-windres.exe
[ -f /mingw32/bin/i686-w64-mingw32-windres.exe  ] || ln -s /mingw32/bin/windres.exe /mingw32/bin/i686-w64-mingw32-windres.exe

4.设置环境

进入MSYS2 MinGW 64-bit shell,运行

mkdir ~/prefix
echo 'export PATH="$HOME/prefix/bin:$HOME/prefix/lib:/mingw64/bin:/mingw32/bin:$PATH"' >> ~/.profile
echo 'export PKG_CONFIG_PATH="$HOME/prefix/lib/pkgconfig"' >> ~/.profile
echo 'export PATH="$HOME/prefix/bin:$HOME/prefix/lib:/mingw64/bin:/mingw32/bin:$PATH"' >> ~/.bash_profile
echo 'export PKG_CONFIG_PATH="$HOME/prefix/lib/pkgconfig"' >> ~/.bash_profile
echo 'export LC_ALL=C' >> ~/.bash_profile

5.编译安装依赖

(1)编译安装GMP

cd ~
curl -O https://gmplib.org/download/gmp/gmp-6.2.1.tar.xz
tar xf gmp-6.2.1.tar.xz
cd gmp-6.2.1
./configure --build=x86_64-w64-mingw32 --prefix="$HOME/prefix" --enable-shared --disable-static --enable-fat
make
make install

(2)编译安装Nettle

cd ~
wget https://ftp.gnu.org/gnu/nettle/nettle-3.7.3.tar.gz
tar xf nettle-3.7.3.tar.gz
cd nettle-3.7.3
./configure --build=x86_64-w64-mingw32 --prefix="$HOME/prefix" --enable-shared --disable-static --enable-fat
make
make install

(3)编译安装zlib

cd ~
wget https://zlib.net/fossils/zlib-1.2.13.tar.gz
tar xf zlib-1.2.13.tar.gz
cd zlib-1.2.13
LDSHAREDLIBC= ./configure --prefix="$HOME/prefix" -u=GNU
make
make install

(4)编译安装GnuTLS

cd ~
wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.7/gnutls-3.7.2.tar.xz
tar xf gnutls-3.7.2.tar.xz
cd gnutls-3.7.2
./configure --prefix="$HOME/prefix" --enable-shared --disable-static --build=x86_64-w64-mingw32 --with-included-libtasn1 --disable-doc --disable-guile --without-p11-kit --enable-local-libopts --disable-nls --with-included-unistring --disable-tests
make
make install

(5)编译安装SQLite

cd ~
wget https://sqlite.org/2018/sqlite-autoconf-3250300.tar.gz
tar xf sqlite-autoconf-3250300.tar.gz
cd sqlite-autoconf-3250300
./configure --build=x86_64-w64-mingw32 --prefix="$HOME/prefix" --enable-shared --disable-static
make
make install

(6)编译安装wxWidgets

cd ~
git clone --branch WX_3_0_BRANCH --single-branch https://github.com/wxWidgets/wxWidgets.git wx3
cd wx3
./configure --build=x86_64-w64-mingw32 --prefix="$HOME/prefix" --enable-shared --disable-static --enable-unicode --enable-printfposparam --without-libtiff --without-libjpeg --with-expat=builtin --with-libpng=builtin
make
make install

如果github的git clone速度慢,可以用其他方法试一下,比如用gitee。

(7)编译安装libfilezilla

cd ~
svn co https://svn.filezilla-project.org/svn/libfilezilla/trunk libfilezilla
cd libfilezilla
autoreconf -i 
./configure --prefix="$HOME/prefix" --enable-shared --disable-static
make
make install

6.编译打包Filezilla

(1)下载FileZilla

cd ~
svn co https://svn.filezilla-project.org/svn/FileZilla3/trunk filezilla

(2)编译FileZilla

cd ~/filezilla
autoreconf -i
./configure --with-pugixml=builtin
make

如果遇到问题:

checking for Boost Regex... configure: error: in '/c/SPB_Data/filezilla':
configure: error: Boost Regex 1.76 or higher not found.

解决方法:

pacman -S mingw-w64-x86_64-boost

(3)裁剪debug符号

strip src/interface/.libs/filezilla.exe
strip src/putty/.libs/fzsftp.exe
strip src/putty/.libs/fzputtygen.exe
strip src/fzshellext/64/.libs/libfzshellext-0.dll
strip src/fzshellext/32/.libs/libfzshellext-0.dll
strip data/dlls/*.dll

(4)打包

安装NSIS

从NSIS Wiki下载并安装NSIS 3。

编译打包脚本

文件资源管理器,右键 data/install.nsi文件,使用 "Compile NSIS Script"。

7.相关链接

Client Compile - FileZilla Wiki (filezilla-project.org)

Cross Compiling FileZilla 3 for Windows under Ubuntu or Debian GNU/Linux - FileZilla Wiki (filezilla-project.org)

Compiling FileZilla 3 under Windows - FileZilla Wiki (filezilla-project.org)

另,在Ubuntu下编译Windows版本的FileZilla 3,生成GnuTLS的Makefile文件时,出错,不推荐用linux交叉编译Windows应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/284409.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Maven】工程依赖下载失败错误解决

在使用 Maven 构建项目时,可能会发生依赖项下载错误的情况,主要原因有以下几种: 下载依赖时出现网络故障或仓库服务器宕机等原因,导致无法连接至 Maven 仓库,从而无法下载依赖。 依赖项的版本号或配置文件中的版本号错…

详解Vue3中的事件监听方式

本文主要介绍Vue3中的事件监听方式。 目录 一、v-on指令二、使用符号简写三、事件修饰符四、动态事件名五、常见的监听事件六、自定义事件 在Vue3中,事件监听的方式与Vue2有一些不同。 下面是Vue3中事件监听方式的详细介绍: 一、v-on指令 Vue3中仍然使…

[嵌入式AI从0开始到入土]9_yolov5在昇腾上推理

[嵌入式AI从0开始到入土]嵌入式AI系列教程 注:等我摸完鱼再把链接补上 可以关注我的B站号工具人呵呵的个人空间,后期会考虑出视频教程,务必催更,以防我变身鸽王。 第一章 昇腾Altas 200 DK上手 第二章 下载昇腾案例并运行 第三章…

OCP NVME SSD规范解读-3.NVMe管理命令-part2

NVMe-AD-8:在某些情况下(如Sanitize命令、Format NVM命令或TCG Revert方法后数据被清除),设备应允许读取已清除的LBAs而不产生错误,并在最后一次清除完成后,对未写入LBAs的读取返回所有零值给主机 NVMe-AD…

【北亚数据恢复】mysql表被truncate,表数据被delete的数据恢复案例

云服务器数据恢复环境: 华为ECS云服务器,linux操作系统,mysql数据库(innodb引擎)。作为网站服务器使用。 云服务器故障: 在执行mysql数据库版本更新测试时,误将本应该在测试库上执行的sql脚本执…

【JavaScript】浮点数精度问题

✨ 专栏介绍 在现代Web开发中,JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性,还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言,JavaScript具有广泛的应用场景&#x…

移动端开发框架mui代码在安卓模拟器上运行2(HbuilderX连接到模拟器)模拟器窗口及多开设置

开发工具 HBuilder X 3.8.12.20230817 注意:开发工具尽量用最新的或较新的。太旧的版本在开发调试过程中可能会出现莫名其妙的问题。 接上篇,移动端开发框架mui代码在安卓模拟器上运行(HbuilderX连接到模拟器),这篇主要…

Mediapipe绘制实时3d铰接骨架图——Mediapipe实时姿态估计

一、前言 大约两年前,基于自己的理解我曾写了几篇关于Mediapipe的文章,似乎帮助到了一些人。这两年,忙于比赛、实习、毕业、工作和考研。上篇文章已经是一年多前发的了。这段时间收到很多私信和评论,请原谅无法一一回复了。我将尝…

HarmonyOS 实践之应用状态变量共享

平时在开发的过程中,我们会在应用中共享数据,在不同的页面间共享信息。虽然常用的共享信息,也可以通过不同页面中组件间信息共享的方式,但有时使用应用级别的状态管理会让开发工作变得简单。 根据不同的使用场景,ArkTS…

HarmonyOS 组件通用属性之通用事件 文档参数讲解(触摸事件)

好 本文 我们来说说触摸事件 字面意思也非常好理解 就是我们手机手指触摸物体触发 我们先在编辑器组件介绍中 找到这个东西的基本用法 Button("跳转").onTouch((event: TouchEvent) > {})最明显的就是 event 的类型变了 点击事件的是 ClickEvent 而这里是 Touc…

14 2023.12.31 --------release--------misc--------

呵呵 一部分 misc 存在草稿箱好久了 而且 也并没有那么重要, 直接放出去吧 今年的 专业技能方面的收获主要是一些方面 linux 方面, 这部分内容主要是集中在上半年 90 telnet 连接上对方服务之后 立即 “Connection closed by foreign host.“ 89 重写 /proc/sys/vm/nr_pd…

【LMM 002】大型语言和视觉助手 LLaVA-1.5

论文标题:Improved Baselines with Visual Instruction Tuning 论文作者:Haotian Liu, Chunyuan Li, Yuheng Li, Yong Jae Lee 作者单位:University of Wisconsin-Madison, Microsoft Research, Columbia University 论文原文:htt…

win/linux 环境查看动态库包含的函数

我们打包了动态库,还要查看是否包含一些函数,需要导出这些函数 在win 环境下可以使用 .def 格式的文件进行操作 ######################################################### 跳过这一步,回到主题,在两个系统平台如何查看动态库包…

LanceDB:在对抗数据复杂性战役中,您可信赖的坐骑

LanceDB 建立在 Lance(一种开源列式数据格式)之上,具有一些有趣的功能,使其对 AI/ML 具有吸引力。例如,LanceDB 支持显式和隐式矢量化,能够处理各种数据类型。LanceDB 与 PyTorch 和 TensorFlow 等领先的 M…

图文证明 等价无穷小替换

等价无穷小替换 定义 等价无穷小是无穷小之间的一种关系,指的是:在同一自变量的趋向过程中,若两个无穷小之比的极限为1,则称这两个无穷小是等价的。无穷小等价关系刻画的是两个无穷小趋向于零的速度是相等的。 设当 x → x 0 时…

第5课 使用openCV捕获摄像头并实现预览功能

这节课我们开始利用ffmpeg和opencv来实现一个rtmp推流端。推流端的最基本功能其实就两个:预览画面并将画面和声音合并后推送到rtmp服务器。 一、FFmpeg API 推流的一般过程 1.引入ffmpeg库:在代码中引入ffmpeg库,以便使用其提供的功能。 2.捕获摄像头…

条款14:在资源管理类中小心拷贝行为

你可能会发现,有时候需要创建自己的资源管理类。例如,假设你正在使用一个C API来操作互斥对象,互斥类型提供了lock和unlock函数: void lock(Mutex* pm); // 锁住pm指向的互斥量 void unlock(Mutex* pm); // 互斥量解锁 class Lock { publi…

【LMM 003】生物医学领域的垂直类大型多模态模型 LLaVA-Med

论文标题:LLaVA-Med: Training a Large Language-and-Vision Assistant for Biomedicine in One Day 论文作者:Chunyuan Li∗, Cliff Wong∗, Sheng Zhang∗, Naoto Usuyama, Haotian Liu, Jianwei Yang Tristan Naumann, Hoifung Poon, Jianfeng Gao 作…

2001-2021年各省高速公路里程数据

2001-2021年全国及各省高速公路里程数据 1、时间:2001-2021年 2、指标:高速公路里程 3、范围:全国及30个省市 (不含西藏) 4、来源:各省NJ、省TJGB、第三产业TJNJ (无缺失) 5、指…

Bytebase:统一数据库 CI/CD 解决方案 | 开源日报 No.128

bytebase/bytebase Stars: 7.9k License: NOASSERTION Bytebase 是一个数据库 CI/CD 解决方案,为开发人员和 DBA 提供统一的工具来管理不同数据库系统的开发生命周期。其主要功能包括标准化操作流程、SQL 代码审查、GitOps 集成以及数据访问控制等。关键特性和核心…
最新文章