黄冈网站推广软件有哪些,百度销售系统登录,如何网页截图快捷键,东莞网站seo优化引言
在嵌入式开发中#xff0c;我们经常需要将桌面端开发的Qt程序部署到ARM架构的Linux设备。本文详细介绍如何将Windows平台开发的Qt程序#xff0c;通过Linux虚拟机交叉编译为ARM架构可执行文件的完整过程
环境准备
需要特别注意的是#xff0c;对于CentOS 7 默认支持…引言
在嵌入式开发中我们经常需要将桌面端开发的Qt程序部署到ARM架构的Linux设备。本文详细介绍如何将Windows平台开发的Qt程序通过Linux虚拟机交叉编译为ARM架构可执行文件的完整过程
环境准备
需要特别注意的是对于CentOS 7 默认支持的GCC版本是4.8这个版本对于Qt 6及以上的版本不支持。此外使用Qt 5.15.2也需要升级GCC注意QT版本。
开发环境
宿主机Windows 11虚拟机Ubuntu 18.04 LTSVmware workstation运行目标设备ARM64架构Linux
工具清单
工具版本要求作用Windows的Qt Creator5.15Windows端开发IDELinux的Linaro工具链GCC 7.5ARM交叉编译器Linux的Qt源码包5.15.2交叉编译Qt库 完整操作流程
一、配置Linux交叉编译环境
1. 安装ARM64工具链
解释这部分主要是下载ARM64的工具链解压搭配/opt并且将这个路径添加到环境变量中使得系统可以直接找到这个工具链。source ~/.bashrc设定环境变量的设置立刻生效。
wget https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz
sudo tar -xvf gcc-*.tar.xz -C /opt
echo export PATH/opt/gcc-linaro-7.5.0/bin:$PATH ~/.bashrc
source ~/.bashrc
2. 验证工具链
aarch64-linux-gnu-gcc --version 二、交叉编译Qt库
1. 下载并解压Qt源码
解释Linux版本的QT程序主要是为了适配ARM平台功能提供跨平台API的ARM实现。
wget https://download.qt.io/archive/qt/5.15/5.15.2/single/qt-everywhere-src-5.15.2.tar.xz
tar xvf qt-everywhere-src-5.15.2.tar.xz
2. 配置编译参数
解释这部分进入解压后Linux的QT目录。修改QT程序的配置主要指定了安装路径目标平台需要使用的编译器和工具链。并且禁用了opengl和xcb。
cd qt-everywhere-src-5.15.2
./configure -prefix /opt/qt5-arm -xplatform linux-aarch64-gnu-g -opensource -confirm-license -no-opengl -no-xcb
3. 编译安装
解释解压后的QT还不能用需要使用make编译成二进制的机器码生成可执行文件、库文件。-j$(nproc)主要是自动读取处理器数量加速编译。完成之后执行安装。
make -j$(nproc) sudo make install 三、移植Qt项目
1. 修改.pro文件
解释需要在我们编写的QT项目.pro文件处添加以下代码用于指定ARM架构的交叉编译工具和Linux中QT程序的位置。
# ARM交叉编译配置
linux-aarch64-gnu-g {QMAKE_CC aarch64-linux-gnu-gccQMAKE_CXX aarch64-linux-gnu-g# 指定Qt库路径QT_INSTALL_PREFIX /opt/qt5-armQMAKE_LIBDIR_QT $$QT_INSTALL_PREFIX/libQMAKE_INCDIR_QT $$QT_INSTALL_PREFIX/include# 优化参数QMAKE_CFLAGS -marcharmv8-a -mtunecortex-a72QMAKE_CXXFLAGS $$QMAKE_CFLAGS
}
2. 生成Makefile
/opt/qt5-arm/bin/qmake -spec linux-aarch64-gnu-g
3. 执行编译
make clean make -j4
之后这样生成的文件便可以在arm架构的Linux上运行了。
四、部署
在部署到目标平台arm架构的Linux后执行以下命令进行图形库安装为程序添加执行权限以及执行程序。注意查看当前目录下有没有你的执行程序程序名字也不需要加
# 安装运行时依赖
sudo apt install libqt5core5a libqt5gui5# 运行程序
chmod x your appliction
./your appliction -platform linuxfb # 无GUI设备使用帧缓冲模式
值得一提的是如果目标设备的屏幕已经被一个程序占据导致你的程序无法显示。
可以先使用ps -elf | grep 程序名字 找到进程再使用kill 结束进程。之后在运行进程。 一些额外说明
1.交叉编译与编译不同点在于交叉编译出来的程序无法在执行编译的环境运行比如刚刚的Linux上使用arm的交叉编译工具链编译出来的程序就无法运行必须要在arm架构的Linux才能运行。
2.QT的跨平台是指一份源码在编译后可以在多个平台运行。而不是一份源码在多个平台直接运行。因此Windows程序即使向同架构的Linux操作系统移植QT也需要使用源码在Linux编译一次。
3.配置交叉工具的原因即使是Windows上面也有一个编译工具默认为x86/x64的机器码。当要在不同架构运行QT的时候需要显示指定编译工具比如arm架构运行的交叉编译工具。
容易混淆的点一般来说如果在Windows编译同架构的Linux程序同样需要交叉编译工具。但如果只是在Windows编写源码在Linux进行编译则不需要配置交叉编译工具。