Qt系列文章022-QFTP编译

1 前言

最近遇到几个Ftp需求,想使用Qt官方的Ftp试试,就打算自己编译QFtp,开始以为很复杂,其实没啥难度!三两下就搞定了!下面看具体步骤

2 克隆QFtp源码

从 GitHub 下载 QFtp:

qtftp源码

或者使用命令下载 :

git clone https://github.com/qtproject/qtftp

公众号:Qt实战,各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发。

公众号:Qt入门和进阶,专门介绍Qt/C++相关知识点学习,帮助Qt开发者更好的深入学习Qt。多位Qt元婴期大神,一步步带你从入门到进阶,走上财务自由之路。

官方店:https://shop114595942.taobao.com//

3 编译源码

首先由qtcreate打开根目录下的pro,项目里面有三个可以直接看到的项目
在这里插入图片描述
在这里插入图片描述
如上图能看到 examples、src、tests
我们只编译第二个 src

然后修改 src\qftp\qftp.pro 中的

CONFIG += static
CONFIG -= shared
改为
CONFIG -= static
CONFIG += shared

在这里插入图片描述

MSVC 修改为

CONFIG += staticlib
CONFIG += shared

生成.lib和.prl

然后开始编译,编译完成后会在构建目录\lib\目录下生给予成我们需要的动态库静态库文件。
在这里插入图片描述

4 编译错误缺少perl解决

在编译期间可能会报错Perl错误,此时需要安装perl

我们可以在 Perl 的官网下载对应平台的安装包: https://www.perl.org/get.html

Window 安装 Perl:
Perl 在 Window 平台上有 ActiveStatePerl 和 Strawberry Perl 编译器。
ActiveState Perl和 Strawberry Perl最大的区别是 Strawberry Perl 里面有多包含一些 CPAN 里的模块, 所以Strawberry Perl 下载的安装文件有 80多M, 而ActiveState Perl 只有20M 左右。
我们这里使用了 Strawberry Perl (其实ActiveState Perl足够了)

Strawberry 安装包链接http://strawberryperl.com

5 部署编译好的库

  1. 将动态库(bin/*.dll文件)拷贝至xxxx\Qt5.12.10\5.12.10\mingw73_32\bin目录下
    在这里插入图片描述

  2. 将静态库(lib/*.a文件)及 lib/*.prl 文件 拷贝至xxx\Qt5.12.10\5.12.10\mingw73_32\lib目录下
    在这里插入图片描述

  3. 将构建目录下**/include/** 目录下的 QtFtp 文件夹拷贝至xxxx\Qt5.12.10\5.12.10\mingw73_32\include目录下
    在这里插入图片描述
    QtFtp目录内容如下:
    在这里插入图片描述
    后面我发现,上面生成的qftp.h 和 qurlinfo.h 是不对的,必须拿到src目录下的头文件才是真正的头文件,赋值替换即可

  4. 将构建目录下文件 \mkspecs\modules-inst*qt_lib_ftp.pri 和 qt_lib_ftp_private.pri* 拷贝至xxx\Qt5.12.10\5.12.10\mingw73_32\mkspecs\modules目录
    在这里插入图片描述

6 使用编译好的库

在项目的 .pro文件 添加

QT += ftp

如果不能识别,就手动加入dll链接库,例如:(一般用不到!!!)

 LIBS+="xxx/Qt5.12.10/5.12.10/mingw73_32/bin/Qt5Ftp.dll"

7 MSVC2019编译QFtp补充

更新时间:2021年10月9日 15:49:50

7.1 编译不出dll解决方案

今天用MSVC2019,Qt5.12.11来编译QFtp源码时,发现编译不出 *.dll, 百度一番基本无果,后面终于被我编译出来了,下面看详细步骤讲解。

编译QFtp只需要编译src目录即可, 所以首先注释掉SUBDIRS子目录中的例子和测试程序,如下图:
在这里插入图片描述
然后修改一下 src\qftp 下的“qftp.h”文件:

#include <QFtp/qurlinfo.h>
改为
#include <qurlinfo.h>

在这里插入图片描述
根据网上的说法只需要更改src目录中的qftp.pro中的CONFIG即可,如下:

打开 qtftp.pro,将默认配置:

CONFIG += static
CONFIG -= shared

改为:

CONFIG += staticlib
CONFIG += shared

网上的说法是这样更改后,既能生成 *.dll 的同时也会生成 *.lib。但是我这样更改后发现是无法生成*.dll文件的,也就是Qt5Ftp.dll 文件,如下图:
在这里插入图片描述

然后编译后的lib文件夹如下:
在这里插入图片描述
可以看到是没有dll文件出来的,只有lib和prl, 所以这种改法是有问题,而我自己摸索得编译方式是:
首先更改CONFIG为

CONFIG += static
CONFIG -= shared
改为
CONFIG -= static
CONFIG += shared

在这里插入图片描述
然后进行编译,此时你会发现,dll编译出来了,但是没有lib文件了,如下图:
在这里插入图片描述
所以还需要再改一次CONFIG标记,重新清除,然后qmake,构建即可,将CONFIG更改为上面的

CONFIG += staticlib
CONFIG += shared

重新编译后,如下图:(切记更改CONFIG后,一定要清除,可以不qmake,必须要清除原有的配置文件,否则不生效)
在这里插入图片描述
这样折腾完成之后会在 lib 文件夹下生成 *.lib、*.dll、*.prl 文件。

  • 将 Qt5Ftpd.lib、Qt5Ftp.lib、Qt5Ftpd.prl、Qt5Ftp.prl 拷贝至 D:\Qt\Qt5.12.11\5.12.11\msvc2017\lib。
  • 将 Qt5Ftpd.dll、Qt5Ftp.dll 拷贝至 D:\Qt\Qt5.12.11\5.12.11\msvc2017\bin。
  • 将 qftp.h、qurlinfo.h 拷贝至 D:\Qt\Qt5.12.11\5.12.11\msvc2017\include\QtNetwork,并新建一个名为 QFtp 的文件(没有后缀名),然后用本写入 #include “qftp.h”。(qftp.h一定要改成修改)

完成之后,就可以使用 QFtp 了。

例如,如果要连接并登录到 FTP 服务器,这是简单的实现:

#include <QFtp>

// ...
QFtp *ftp = new QFtp(parent);
ftp->connectToHost("192.168.***.***", 21);  // 主机:192.168.***.*** 端口号:21  
ftp->login("wang", "123456");  // 用户名:wang 密码:123456
// ...

8 QFtp在线文档地址

详细QFtp官方文档在线网址

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值