3.1、移植Qt程序到ARM平台----移植Qt程序到ARM平台(扩展)

张开发
2026/5/5 13:54:38 15 分钟阅读
3.1、移植Qt程序到ARM平台----移植Qt程序到ARM平台(扩展)
移植Qt程序到ARM平台(扩展内容)先安装必备的库sudo apt-get update sudo apt-get upgrade sudo apt-get install g sudo apt-get install autoconf automake libtool sudo apt-get install cmake sudo apt-get install libclang-dev再安装sudo apt-get install bison build-essential gperf flex ruby python libasound2-dev libbz2-dev libcap-dev \ libcups2-dev libdrm-dev libegl1-mesa-dev libgcrypt11-dev libnss3-dev libpci-dev libpulse-dev libudev-dev \ libxtst-dev gyp ninja-build libglu1-mesa-dev libfontconfig1-dev libx11-xcb-dev libicu-devUbuntu移植我们使用在虚拟机交叉编译Qt源码和项目的方式得到能在开发板上面运行的程序。安装交叉编译器GNU交叉编译器下载地址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复制到你想安装的目录下我们这里选择为**/opt**文件夹下复制完成后在/opt目录下输入命令进行解压sudo tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar -C /opt/解压之后获得一个名为gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu的文件夹这个文件夹的名字太长了我们将这个文件夹重命名为gcc-aarch64-linux-gnusudo mv gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu gcc-aarch64-linux-gnu将**/opt/gcc-aarch64-linux-gnu/bin**目录添加到环境变量中sudo gedit /etc/profile在文件的末尾添加如下内容export PATH/opt/gcc-aarch64-linux-gnu/bin:$PATH接下来输入命令让环境变量生效source /etc/profile重启一下reboot重启之后输入命令查看环境变量是否生效aarch64-linux-gnu-gcc -v若出现如下图所示情况则证明安装成功了。交叉编译Qt库如果交叉编译Qt库一直失败那么可以直接在百度网盘链接中下载我们已经交叉编译成功之后的Qt5.12.10的库百度网盘链接:https://pan.baidu.com/s/1HtnpytCBBqBOqZi8mfV4VQ?pwdqcxx提取码qcxx百度网盘文件位置立创泰山派开发板资料-第11章.【立创·泰山派】常见问题-Qt5.12.10-arm(已经交叉编译)【RK3566】-qt5.12.10.tar.gz我们需要下载Qt5.12.10的源码然后使用交叉编译器编译Qt源码将支持库转移到开发板上面这样Qt程序才能运行。下载地址https://download.qt.io/archive/qt/5.12/5.12.10/single/下面这个md5sums.txt文件中是校验码我们下载完成转移到虚拟机上面建议校验下在下载过程中有没有出错。将下载的压缩包复制到/opt目录下解压tar -xvf qt-everywhere-src-5.12.10.tar.xz解压完成之后得到这个文件/opt/qt-everywhere-src-5.12.10然后我们编辑qmake配置文件sudo gedit /opt/qt-everywhere-src-5.12.10/qtbase/mkspecs/linux-aarch64-gnu-g/qmake.conf将文件改为# # qmake configuration for building with aarch64-linux-gnu-g # MAKEFILE_GENERATOR UNIX CONFIG incremental QMAKE_INCREMENTAL_STYLE sublib QT_QPA_DEFAULT_PLATFORM linuxfb QMAKE_CFLAGS_RELEASE -O2 -marcharmv8-a -lts QMAKE_CXXFLAGS_RELEASE -O2 -marcharmv8-a -lts include(../common/linux.conf) include(../common/gcc-base-unix.conf) include(../common/g-unix.conf) # modifications to g.conf QMAKE_CC aarch64-linux-gnu-gcc QMAKE_CXX aarch64-linux-gnu-g QMAKE_LINK aarch64-linux-gnu-g QMAKE_LINK_SHLIB aarch64-linux-gnu-g # modifications to linux.conf QMAKE_AR aarch64-linux-gnu-ar cqs QMAKE_OBJCOPY aarch64-linux-gnu-objcopy QMAKE_NM aarch64-linux-gnu-nm -P QMAKE_STRIP aarch64-linux-gnu-strip load(qt_config)主要是添加这三行QT_QPA_DEFAULT_PLATFORM linuxfbQMAKE_CFLAGS_RELEASE -O2 -marcharmv8-a -ltsQMAKE_CXXFLAGS_RELEASE -O2 -marcharmv8-a -ltsQT_QPA_DEFAULT_PLATFORM linuxfb 这一行设置了 Qt Quick/QML 应用程序的默认平台插件。linuxfb是 Linux Framebuffer 的缩写它是一种在嵌入式系统上直接控制显示设备的方法。设置为linuxfb表明 Qt 应用程序将使用 Linux Framebuffer 作为默认的图形平台这适用于一些嵌入式系统。QMAKE_CFLAGS_RELEASE -O2 -marcharmv8-a -lts 这一行设置了在 Release 模式下编译 C 代码时的编译标志。具体地说-O2表示启用优化级别 2这会使编译器对代码进行更多的优化以提高执行效率。-marcharmv8-a表示生成适用于 ARMv8-A 架构的代码。ARMv8-A 是支持 64 位指令集的 ARM 架构的一种实现常见于现代的 ARM 处理器。QMAKE_CXXFLAGS_RELEASE -O2 -marcharmv8-a -lts 这一行设置了在 Release 模式下编译 C 代码时的编译标志与上一行类似。它也会将相同的优化级别和目标架构应用于 C 代码。进入qt库文件夹cd /opt/qt-everywhere-src-5.12.10/我们输入以下命令创建一个autoConfig.sh脚本sudo gedit autoConfig.sh在脚本中输入以下内容#!/bin/sh ./configure \ -prefix /opt/qt5.12.10-arm \ -confirm-license \ -opensource \ -release \ -make libs \ -xplatform linux-aarch64-gnu-g \ -pch \ -qt-libjpeg \ -qt-libpng \ -qt-zlib \ -no-opengl \ -no-sse2 \ -no-openssl \ -no-cups \ -no-glib \ -no-dbus \ -no-separate-debug-info \-prefix /opt/qt5.12.10-arm指定 Qt 的安装路径为/opt/qt5.12.10-arm。这意味着编译完成后 Qt 库和工具将安装到这个目录下。-confirm-license确认接受 Qt 的许可协议。-opensource使用开源许可证编译 Qt。-release编译 Qt 为发布版本而非调试版本。-make libs只编译 Qt 库而不编译示例程序等。-xplatform linux-aarch64-gnu-g指定目标平台为 Linux并使用aarch64架构进行编译。gnu-g表示使用 GNU 工具链进行编译。-pch启用预编译头文件功能以加快编译速度。-qt-libjpeg、-qt-libpng、-qt-zlib指定 Qt 在编译时使用系统中已安装的 libjpeg、libpng 和 zlib 库。-no-opengl不编译 Qt 的 OpenGL 模块。-no-sse2禁用 SSE2 指令集优化。-no-openssl不编译 Qt 的 OpenSSL 模块。-no-cups不编译 Qt 的 CUPS 模块用于打印支持。-no-glib不编译 Qt 的 GLib 模块。-no-dbus不编译 Qt 的 D-Bus 模块。-no-separate-debug-info不生成单独的调试信息文件。给这个.sh脚本运行权限sudo chmod 777 autoConfig.sh然后运行autoConfig.sh会自动生成Makefile文件./autoConfig.sh运行完成截图接下来我们输入make进行编译时间有点长先切换为root用户如果直接执行sudo make -j12会报环境变量错误sudo会创建一个新的环境sudo su - root make -j12编译完成之后输入下面命令开始安装:sudo su - root make install一段时间后可以看见/opt目录下出现了我们指定的安装目录/opt/qt5.12.10-arm表示安装成功。

更多文章