Ubuntu20.04.1(X86_64)Qt5.14.2配置ARM64交叉编译环境
已有环境:
PC Linux Ubuntu20.04.1 64位 X86架构
Qt 版本号5.14.2
交叉编译器:gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu
概述:由于习惯性偷懒,所以不论做什么,都喜欢找现成的工具做开发,最近需要开发Ubuntu系统的软件,所以选择Qt,做个简单的界面,但是在交叉编译环节却困难重重,网上的介绍有很多,但是简单有效的方案不多,因此写下这个文档记录一下。
需求:
在ARM64平台的Ubuntu18.0.*系统中(Xavier),内置硬件测试程序(HW_CIT),主要功能为自动测试各种硬件是否正常。
工具:Qt 源码 地址:http://download.qt.io/archive/qt/
Qt Ubuntu 版本安装包 地址:http://download.qt.io/archive/qt/
ARM64交叉编译工具 (由于之前编译RK3399,所以配置了gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu编译器,网上应该还有很多其他版本)
(可以直接网上搜,或者去官网下载,方法非常多!!!)
步骤:
1.下载Qt 源码
根据上述的地址,选取自己适用的版本下载即可,我用的是5.14.2,需要注意自己的已有环境,本人PC是Linux系统,我第一次却下载的qt-everywhere-src-5.14.2.zip,解压后,有很多识别不了的符号,编译总是出错,所以应该选择下载qt-everywhere-src-5.14.2.tar.xz
2.下载Linux Qt可运行程序,并安装(记住安装路径,后续有用)
下载qt-opensource-linux-x64-5.14.2.run后,修改权限 sudo chmod +x,然后运行,就会出现图形界面,按步骤一步步安装即可,现在的安装只是适配了,PC现有的编译环境,编译出来的程序只能在X86_64的机器上运行。
查看一下安装路径:(本人是根目录)
只有gcc_64.
在这里我们来描述一下,Qt中最重要的工具qmake,qmake -project 生成*.pro文件;qmake -makefile 生成Makefile文件;Qt除了本身的一些库文件外,最重要的应该就是qmake了,因此我们推断一下Qt的编译过程,build –> 选择相应的qmake --> 根据构建工程选择的配置,生成对应的Makefile –>make -->生成对应的*.o和TARGET out;从上述结论中,我们是不是可以根据qt的源码,编译出对应ARM 64的qmake工具,就可以实现交叉编译了???
3.安装ARM64编译器
sudo cp -rf gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu /opt/
我是直接放在了opt下,然后在环境变量里/etc/profile添加全局变量
#borrieguo add arm aarch64
export PATH=$PATH:/opt/gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu/bin
然后source /etc/profile
查看配置是否成功 输入aarch64 +TAB是否出现提示:
这样就算配置成功了,要是不放心可以写个简单的Demo测试一下,此步骤省略(主要是我懒,抱拳!!!)
4.编译Qt源码(编译出对应的arm64平台工具链)
这里需要注意一下,编译源码会出现各种问题,遇到过的,没遇到过的,我的做事风格就是走一步看一步,出现什么问题就解决什么问题,但是好多时候就会直接翻车,如果项目时间紧迫,最好还是选取保险的方案比较好, 但是由于我的懒惰,我先选取了方案一,将Qt源码放到ARM64平台上的Linux下,直接编译,这样直接安装,不就可以直接在Xavier上运行了吗?但是理想很丰满,现实很骨干,源码确实不怎么大523M,但是解压编译后,却已经接近100G了,显然对于ROM只有32G的Xavier,是不适用的。方案二,在自己的PC上配置ARM64的编译环境,在PC上编译完成后,配置Qt交叉编译环境,然后再用Qt编译自己写的代码,最后copy到ARM平台上运行即可。
一.解压qt-everywhere-src-5.14.2.tar.xz
xz -d qt-everywhere-src-5.14.2.tar.xz
得到qt-everywhere-src-5.14.2.tar
tar xvf qt-everywhere-src-5.14.2.tar.xz
得到文件夹qt-everywhere-src-5.14.2
二.修改编译配置文件
源码中qt-everywhere-src-5.14.2/qtbase/mkspecs下,对应的是所有的编译平台,我们只需要修改自己需要的即可,不需要全部配置编译
vim linux-aarch64-gnu-g++/qmake.conf 修改如下:
这些工具需要和自己的交叉编译工具,保持一致,否则编译失败
三.开始编译,进入根目录cd qt-everywhere-src-5.14.2
source /etc/profile
./configure -prefix /home/borrieguo/Qt5.14.2/5.14.2/aarch64 -make libs -xplatform linux-aarch64-gnu-g++ -no-opengl -skip qtdeclarative
-prefix 代表你的安装文件夹
-xplatform 代表你所制定的编译器
no-opengl 跳过编译openGL(因为我已经安装了Qt,所以不需要界面)
-skip qtdeclarative 跳过 qtdeclarative(不跳过,编译出错,出错的原因不清楚)
如果有别的需求,可以./configure -help查看具体命令
make -j16 2>&1 | tee build.log(线程开到了最大,并把log存在了本地)我这样编译需要十几分钟,具体时间比较依赖自己PC的配置。
Mkdir -p Qt5.14.2/5.14.2/aarch64,创建安装文件夹
make install
四.查看结果:
安装成功!!
4.配置Qt,添加交叉编译环境
一.打开Qt
二.tools → options,打开面板
三.设置compilers,手动添加ARM64交叉编译器
add c
add c++
四.手动add qt version
五.手动add kits
六.新建工程&编译
选择刚刚手动添加的kits
编译:output如下
验证成功!!!
备注:这只是个人的配置记录,仅供参考!