✨✨ Rqtz 个人主页 : 点击✨✨
🎈PyQt系列专栏:点击🎈
🎈Qt智能车上位机专栏: 点击🎈
🎈Qt串口助手专栏:点击🎈
💫宗旨:共享IT之美,共创机器未来
目录
前言
设备介绍
查询系统架构
下载交叉编译器
编辑
将交叉编译器写入环境变量
配置Qt的arm64编译环境
配置前的相关工作重要
Qt源码下载地址 点击
将本地的arm64交叉编译器配置到Qt中
将程序拷贝到开发板
成功图片
前言
本来编写这个小软件是在电脑PC端上运行的,但是由于最近比赛需要使用板子,我这里使用的是jeston nano B01 ,由于板子架构方式和电脑PC架构方式不一样,一个是aarch64,一个是x86_64,软件是在pc端编写的,交媾为x86_64,所以无法在arm64架构的板子上运行.软件是基于Qt框架编写的,一次可以使用交叉编译的方式,将软件一直到嵌入式平台arm64运行.如图
设备介绍
PC端/电脑 :linux系统/ubuntu 20.04 (只是图标换成18.04的了)
操作系统类型/架构:64位/x86_64
品牌:联想拯救者Y7000P
GPU:NVIDIA 4060
CPU:13th Gen Intel® Core™ i7-13620H × 16
板子/小电脑:jeston nano B01
操作系统类型/架构:64位/aarch64
Qt 版本:5.12.8
Qt creater 版本:4.9.2
交叉编译器:gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu
查询系统架构
命令
uname -a
PC
jeston nano b01/开发板
jeston nano b01图片
下载交叉编译器
访问官网Downloads | GNU-A Downloads – Arm Developer
- 选择下方后点击
- 找到红色框选的下载
下载完成后
- 解压缩
tar -xvf gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz
- 重命名
mv gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu aarch64-linux-gnu-8.3.0
- 将该目录复制到opt
sudo cp -rf aarch64-linux-gnu-8.3.0/ /opt
将交叉编译器写入环境变量
- 在主目录中使用快捷键crtl+H,找到./bashrc
- 双击打开,添加如下代码
export PATH=$PATH:/opt/aarch64-linux-gnu-8.3.0/bin
- 保存后更新环境
source ~/.bashrc
- 终端输入验证,按tab可以出现即可
- 使用which查看位置
which aarch64-linux-gnu-gcc-8.3.0
配置Qt的arm64编译环境
配置前的相关工作重要
安装编译需要的所有组件
sudo apt install build-essential libgl1-mesa-dev gperf libclang-dev -y
安装python环境
sudo apt install python -y
sudo apt install python-dev -y
sudo apt install python-pip -y
Qt源码下载地址 点击
- 解压
tar -xvf qt-everywhere-src-5.12.8.tar.xz
-
在主目录构建一个文件夹
mkdir -p aarch64
将解压后的包放到该目录
-
配置qmake,请按照
/home/xxx/aarch64/qt-everywhere-src-5.12.8/qtbase/mkspecs/linux-aarch64-gnu-g++ xxx为你的主机名,打开qmake.conf
-
编辑qmake.conf,双击打开,主要是更换路径,更换你的交叉编译器路径,刚才复制到了opt
-
在aarch64目录下再创建两个文件夹,分别用于存储arm64的相关库和编译
-
执行configure,在arm_bulid中打开终端,执行
./configure -release -opensource -confirm-license -xplatform linux-aarch64-gnu-g++ -prefix /home/rqtz/aarch64/arm64 -nomake examples -no-opengl -silent -qpa linuxfb
-
注意两个地方
-
-xplatform 参数后面跟的是按照下面路径打开后框选中的名字,即编译器
-
-prefix 参数后面根的是你的最终安装路径
其他参数
-
基本安装选项
- -bindir:可执行文件目录[PREFIX/bin]。
- -libdir:库文件目录 [PREFIX/lib]。
- -headerdir:头文件目录[PREFIX/include]。
- -datadir:Arch独立的数据目录[PREFIX]。
- -plugindir:插件目录[ARCHDATADIR/plugins]。
- -importdir:QML1 imports模块目录[ARCHDATADIR/imports]。
- -qmldir:QML2 imports模块目录[ARCHDATADIR/qml]。
-
构建选项
- -opensource:构建Qt的开源版本。
- -commercial:构建Qt的商业版本。
- -confirm-license:自动确认许可证。
- -release:构建Qt的发布版本。
- -debug:构建Qt的调试版本。
- -debug-and-release:构建Qt的调试和发布两个版本。
- -shared:建立共享的Qt库。
- -static:构建静态Qt库。
-
特性支持
- -feature-:启用。
- -no-feature-:禁用。
- -list-features:列出可用功能特性。
- -list-libraries:列出可能的外部依赖项。
-
第三方库
- -system-:使用系统安装的第三方库。
- -qt-:使用Qt自带的第三方库。
-
高级选项
- -platform :选择主机mkspec。
- -xplatform :交叉编译时选择目标mkspec。
- -device :交叉编译设备。
- -device-option <key=value>:为设备mkspec添加选项。
- -appstore-compliant:禁用平台应用商店中不允许使用的代码。
-
-
输入o 回车
输入y回车
-
编译安装,根据电脑性能编译时间长久之分
make -j6
执行成功后
sudo make install
最终 arm64目录生成如下,其中lib目录中即为aarch64的动态库,需要弄到板子上使用。
-
查看库的架构方式,为aarch64才正常
readelf -h libQt5Core.so
将本地的arm64交叉编译器配置到Qt中
1):打开Qt creater 上方菜单栏 工具-->选项-->编译器
2)如图所示添加GCC的C++,完成之后点击apply
3)如图所示添加GCC的C,完成之后点击apply
4)配置Qt version
上图的qmake路径为之前编译是创建的arm64目录中的bin下,注意不能有报错,佛欧则无法使用。
5)配置编译套件
6)选择需要到板子上使用的程序编译,注意选择release模式编译,并选择刚刚配置的aarch64编译器,点击锤子编译,不要点击绿色三角,因为平台不一样。
7)编译成功后就会生成一个可执行程序,将该目录的所有文件压缩后发送到开发板使用。
使用file命令和readelf查看是否为aarch64架构
将程序拷贝到开发板
在小电脑上将文件夹解压,打开终端使用./的方式执行。
- 问题1:执行时发现终端提示找不到libQtcore.so.5的动态链接库。这个时候我们就需要用到上面我们在编译时创建的arm64的目录了。
打开arm64-->lib,找到libQtcore.so.5将其拷贝到小电脑/开发板上即可。以后提示缺少什么库我们从这里面直接拷贝即可。
在开发板上使用
sudo cp libQt5Core.so.5 /usr/lib
即可。
- 问题2:由于该程序使用了串口,执行时终端提示
relocation error: /usr/lib/libQt5SerialPort.so.5: symbol _ZN16QIODevicePrivate4skipEx version Qt_5_PRIVATE_API not defined in file libQt5Core.so.5 with link time reference
解决:终端执行
sudo apt-get install libqt5serialport5-dev libudev-dev
成功图片
我是将其移植到了linux的桌面环境,这样启动程序更加方便。具体做法请看[ linux添加应用图标到桌面 ] : 中将应用程序添加图标(快捷方式 ),并放置任务栏中,.desktop文件使用_linux 任务栏图标-CSDN博客
如有错误,请大佬指正批评!
参考Qt教程3-Ubuntu(x86_64)上配置arm64(aarch64)交叉编译环境及QT编译arm64架构工程_qt交叉编译arm-CSDN博客