前言:
本人是在Rockchip RV1109的开发板上开发,需要交叉编译Qt5开发https,Qt5本身是支持openssl,但是不同版本的Qt5所支持的openssl版本有所不同。开发板所支持的是Qt5.9.4,openssl版本为1.0版本,本人亲自测试过openssl高版本的,发现交叉编译存在问题,openssl高版本部分接口做了一些修改,因此,Qt5.12版本以下的最好选择1.0版本去适配。
一、系统环境说明:
1.Ubuntu 20.04 LTS
备注:本人在该系统下操作的,其他尚未实践
二、准备工作:
1、GCC编译官网下载:
GCC编译包:gcc-linaro-6.5.0-2018.12-x86_64_arm-linux-gnueabihf.tar.xz
备注:这个编译包看个人的开发环境而定,我这里以该编译工具包为例
2、openssl官网下载:
openssl以下面为例:
3、sqlite官网下载:
这里选择Source Code下的sqlite-autoconf-xxxxxxx.tar.gz(版本随意)
4、Qt5开源包官网下载:
Index of /archive/qt/5.9/5.9.4/single
Qt5.9.4以下面为例:
三、交叉编译:
1、解压gcc编译包、openssl压缩包、sqlite压缩包、Qt5开源包
博主比较懒,解压我就不详细说明了~~
2、openssl交叉编译
a.创建build.sh脚本
if(你觉得你nb,这个脚本可以不创建){
直接在解压后的openssl目录输入指令设置
}else{
在这个脚本写以下内容:
#!/bin/sh
./Configure linux-armv4 no-asm shared --prefix=这里就放你需要安装的路径
将这个脚本放在解压后的openssl同级目录下,不清楚的,你可以看看这个Configure在哪里,放在有这个的目录下就好了,最后运行脚本。
}
b.编译安装
在make之前需要修改Makefile文件,这里说明一下,低版本的openssl的
Configure设置还不是很人性化,当然Linux很多东西本来就麻烦
修改Makefile:
如果你跟博主是下载openssl-1.0.0版本的,请你输入gedit Makefile,拉到62行
这里修改CC、AR、RANLIB、NM、MAKEDEPPROG参数。
if(你不懂){
说明你是刚接触Linux的小白
刚刚下载的GCC编译,你可以查看里面的bin,将路径填上去即可
例如:CC=/home/michael/Linux_QT/gcc-linaro-6.5.0-2018.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc
(这里我是举例子,你要根据你自身的路径去填写,后面的AR、RANLIB等等也一样,只是后缀gcc换成ar、ranlib等等而已)
这个MAKEDEPPROG就填写CC的路径即可
}else{
return;
}
修改完之后:
make -j4
make install
安装过程中可能会出现以下错误:
按照网上流行的说法,将这个/usr/bin/pod2man删掉,再编译。
安装成功后你可以进去你所安装的目录下,file ./lib/libcrypto.so.1.0.0
查看一下交叉编译是否成功
3、Sqlite交叉编译
这个比较简单,同理也是建立一个脚本,大神另说。
touch build.sh
gedit build.sh
编辑build.sh
#!/bin/sh
./configure --prefix=你要安装的路径 \
--host=arm-linux-gnueabihf CC=/home/michael/Linux_QT/gcc-linaro-6.5.0-2018.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc
build.sh里面的host参数,我是arm-linux-gnueabihf的,CC是你gcc编译器路径
同理,在解压路径下运行脚本,make -j4, make install
4、Qt5.9.4交叉编译
如果你看到这里,你会发现一些规律了,Linux安装开源包都会有设置指令让你配置快速配置Makefile,这里真的写得我想吐了。
创建build.sh脚本,这里我不详细讲了
build.sh内容:
#!/bin/sh
OPENSSL_LIBS='-L你安装好的openssl路径下的lib目录 -lssl -lcrypto'
./configure -prefix Qt安装的路径 \
-opensource \
-debug \
-confirm-license \
-xplatform linux-arm-gnueabi-g++ \
-pch \
-linuxfb \
-no-opengl \
-shared \
-no-iconv \
-no-xcb \
-sqlite \
-qt-zlib \
-openssl-linked -I openssl路径下的include目录 -L openssl路径下的lib目录 \
-recheck-all
修改Qt文件:
cd qt-everywhere-opensource-src-5.9.4/qtbase/mkspecs/linux-arm-gnueabi-g++
gedit qmake.conf
qmake.conf:
#
# qmake configuration for building with arm-linux-gnueabi-g++
#
MAKEFILE_GENERATOR = UNIX
CONFIG += incremental
QMAKE_INCREMENTAL_STYLE = sublib
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
QT_QPA_DEFAULT_PLATFORM=linuxfb
QMAKE_INCDIR += sqlite路径下的include目录 openssl路径下的include目录
QMAKE_LIBDIR += sqlite路径下的lib目录 openssl路径下的lib目录
# modifications to g++.conf
#根据自己的GCC编译路径来定
QMAKE_CC = 你的GCC路径下的arm-linux-gnueabihf-gcc
QMAKE_CXX = 你的GCC路径下的arm-linux-gnueabihf-g++
QMAKE_LINK = 你的GCC路径下的arm-linux-gnueabihf-g++
QMAKE_LINK_SHLIB = 你的GCC路径下的arm-linux-gnueabihf-g++
# modifications to linux.conf
QMAKE_AR = 你的GCC路径下的arm-linux-gnueabihf-ar cqs
QMAKE_OBJCOPY = 你的GCC路径下的arm-linux-gnueabihf-objcopy
QMAKE_NM = 你的GCC路径下的arm-linux-gnueabihf-nm -P
QMAKE_STRIP = 你的GCC路径下的arm-linux-gnueabihf-strip
load(qt_config)
修改完之后,返回Qt5.9.4路径下运行build.sh脚本
make -j4
make install
过程比较漫长,请耐心等待
交叉编译完成后,如果你要开发https,那么你需要在你的Qt项目中添加-lssl -lcrypto这两个库