建设校园网站意义,免费培训seo网站,怎么做网页的超链接,网站制做Linux ARM架构QT应用开发环境搭建 前言交叉工具链Ubuntu上安装 32 位 ARM 交叉工具链Ubuntu上安装 64 位 ARM 交叉工具链 交叉编译 QT 库下载 QT 源码交叉编译 QT 源码 Qt Creator交叉编译配置配置 Qt Creator Kits创建一个测试项目 小结 前言
有没有碰到过这种情况#xff1… Linux ARM架构QT应用开发环境搭建 前言交叉工具链Ubuntu上安装 32 位 ARM 交叉工具链Ubuntu上安装 64 位 ARM 交叉工具链 交叉编译 QT 库下载 QT 源码交叉编译 QT 源码 Qt Creator交叉编译配置配置 Qt Creator Kits创建一个测试项目 小结 前言
有没有碰到过这种情况开发出一款软件产品交付给客户客户说安装不上。经过一番调查原因让人哭笑不得你以兆芯为目标进行开发客户电脑却用的是华为鲲鹏。这也不能怪客户经过多年的市场培育在大多数人的认知里电脑就是 Windows 系统加上英特尔处理器。
这些年国产信创 Linux 系统开始推广才有少数人开始有了操作系统的概念原来除了 Windows 系统之外还有其他奇奇怪怪的系统。
不光是操作系统 CPU 也是有好多种并不是只有英特尔兼容的 CPU 才叫 CPU。由于 Intel CPU 的封闭性越来越多的国内厂商瞄准了 ARM。ARM 芯片虽然主要使用在手机、嵌入式系统上但经过厂商多年的努力ARM 芯片的性能不断提升。特别是苹果公司宣布苹果电脑全线产品改用自家的 ARM 芯片给了市场一剂强心剂。搭载苹果 M1、M2 等芯片的 Mac 系列电脑上市后的确带来了惊喜。换芯后的 Mac 电脑不仅性能强大功耗还相当低。
苹果公司把路都探好了国内厂商没有理由不跟进纷纷推出了针对桌面系统的 ARM 芯片比如华为鲲鹏 990。目前搭载华为鲲鹏 990 芯片的笔记本、台式机已经上市操作系统一般搭载麒麟或统信 UOS 操作系统。
操作系统和 CPU 打头阵应用程序得跟上才行。如果是使用 Java、Python 等解释性语言开发的应用只要解释器或者虚拟机进行了移植应用程序无需修改可以直接在新的 CPU 架构上运行。但是对于 C/C 等编译语言开发的应用程序则需要重新编译有的甚至需要重新开发。
QT 作为一种广为流行的跨平台软件开发框架在桌面应用开发中得到广泛应用。如何将为 X86 架构开发的 QT 应用移植到 ARM 架构的系统上是开发人员所要面临的新课题。
本文将介绍如何将 QT 应用程序移植到 ARM 架构的 Linux 系统上方法同样适用于 ARM 版麒麟系统和 统信 UOS 系统。
交叉工具链
开发针对 ARM 架构的 QT 应用有两种开发模式。
第一种就是以目标机作为开发环境比如 ARM 版麒麟系统在上面安装编译器、IDE 工具编写代码并最终编译、打包。不管是 ARM 版麒麟系统还是 ARM 版统信 UOS 系统都有完整的 GCC 工具链编译代码没有问题但诸如 Qt Creator 之类的 IDE 工具就不见得有。另外 ARM 版的 Linux 系统软件不够丰富很多软件还没有提供 ARM 版本碰到问题也不好解决。
所以推荐采用第二种方式即在英特尔 CPU 的Ubuntu 系统上开发、编译、打包最后发布到 ARM 架构的系统上。这种方式就涉及到交叉编译。
所谓交叉编译Cross-Compilation是指在一种计算机系统上生成可在另一种不同体系结构或操作系统上运行的代码的过程。通常情况下交叉编译涉及将源代码从一种平台通常是开发者的本地平台编译成目标平台上的可执行文件或库。这种技术在嵌入式系统、移动设备、服务器和其他各种计算机领域中都非常常见。
交叉编译的第一步就是需要交叉编译器或叫交叉编译工具链这是一种特殊的编译器能够在一种平台上生成另一种平台的代码。
我们需要知道ARM CPU 也是有 32 位和 64 位之分。早期的 ARM CPU比如广泛使用的 ARMv7 指令集就是 32 位。ARMv8-A 架构是 ARM 的第一个支持 64 位指令集的架构它引入了 64 位的通用寄存器和指令集同时也保留了对 32 位指令集的兼容性。
如果你希望你的应用程序具有更好的兼容性可以选择针对 ARM 32 位处理器的交叉编译工具链。如果你希望更好的性能只针对 64 位 ARM 处理器开发那优选 ARM 32 位处理器的交叉编译工具链。
Ubuntu上安装 32 位 ARM 交叉工具链
在Ubuntu 上安装 ARM 交叉工具链推荐直接使用 apt 包管理器。
首先打开终端并更新软件包列表
sudo apt update然后安装 ARM 架构的交叉编译器工具链
sudo apt install gcc-arm-linux-gnueabi这将安装 GNU 工具链其中包括了用于 ARM 架构的交叉编译器。
安装完毕后你可以在终端中输入 arm-linux-gnueabi-gcc -v 命令验证:
$ arm-linux-gnueabi-gcc -v
Using built-in specs.
COLLECT_GCCarm-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER/usr/lib/gcc-cross/arm-linux-gnueabi/9/lto-wrapper
Target: arm-linux-gnueabi
Configured with: ../src/configure -v --with-pkgversionUbuntu 9.4.0-1ubuntu1~20.04.2 --with-bugurlfile:///usr/share/doc/gcc-9/README.Bugs --enable-languagesc,ada,c,go,d,fortran,objc,obj-c,gm2 --prefix/usr --with-gcc-major-version-only --program-suffix-9 --enable-shared --enable-linker-build-id --libexecdir/usr/lib --without-included-gettext --enable-threadsposix --libdir/usr/lib --enable-nls --with-sysroot/ --enable-clocalegnu --enable-libstdcxx-debug --enable-libstdcxx-timeyes --with-default-libstdcxx-abinew --enable-gnu-unique-object --disable-libitm --disable-libquadmath --disable-libquadmath-support --enable-plugin --with-system-zlib --without-target-system-zlib --enable-libpth-m2 --enable-multiarch --enable-multilib --disable-sjlj-exceptions --with-specs%{mfloat-abihard:-marcharmv7-a -mcpugeneric-armv7-a -mfloat-abihard} --with-archarmv5t --with-floatsoft --disable-werror --enable-multilib --enable-checkingrelease --buildx86_64-linux-gnu --hostx86_64-linux-gnu --targetarm-linux-gnueabi --program-prefixarm-linux-gnueabi- --includedir/usr/arm-linux-gnueabi/include
Thread model: posix
gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2)某些 CPU 厂家可能提供了针对自家 CPU 优化的 GCC 交叉工具链请参考提供的文档进行安装和配置。
Ubuntu上安装 64 位 ARM 交叉工具链
步骤和 32 位交叉工具链的安装类似。两种交叉工具链是可以同时安装的。ARM 64 位架构也被称为 AArch64。
打开终端并更新软件包列表
sudo apt update安装 ARM 64 位架构的交叉编译器工具链
sudo apt install gcc-aarch64-linux-gnu验证安装
$ aarch64-linux-gnu-gcc -v
Using built-in specs.
COLLECT_GCCaarch64-linux-gnu-gcc
COLLECT_LTO_WRAPPER/usr/lib/gcc-cross/aarch64-linux-gnu/9/lto-wrapper
Target: aarch64-linux-gnu
Configured with: ../src/configure -v --with-pkgversionUbuntu 9.4.0-1ubuntu1~20.04.2 --with-bugurlfile:///usr/share/doc/gcc-9/README.Bugs --enable-languagesc,ada,c,go,d,fortran,objc,obj-c,gm2 --prefix/usr --with-gcc-major-version-only --program-suffix-9 --enable-shared --enable-linker-build-id --libexecdir/usr/lib --without-included-gettext --enable-threadsposix --libdir/usr/lib --enable-nls --with-sysroot/ --enable-clocalegnu --enable-libstdcxx-debug --enable-libstdcxx-timeyes --with-default-libstdcxx-abinew --enable-gnu-unique-object --disable-libquadmath --disable-libquadmath-support --enable-plugin --enable-default-pie --with-system-zlib --without-target-system-zlib --enable-libpth-m2 --enable-multiarch --enable-fix-cortex-a53-843419 --disable-werror --enable-checkingrelease --buildx86_64-linux-gnu --hostx86_64-linux-gnu --targetaarch64-linux-gnu --program-prefixaarch64-linux-gnu- --includedir/usr/aarch64-linux-gnu/include
Thread model: posix
gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2) 交叉编译 QT 库
QT 应用程序的开发离不开 QT 库。虽然麒麟系统和统信 UOS 系统都带有 QT 库ARM 版带的是 ARM 架构的 QT 库直接使用麒麟系统或统信 UOS 系统的 QT 库最简单。但有几种情况可能会需要你编译自己的 QT 库。
麒麟系统和统信 UOS 系统带的 QT 库版本不同你希望应用程序能同时运行在多种系统上而不是每个系统开发一个版本。你已经为其它平台如 Window、Mac OS 开发了 QT 应用程序当时已经选择了 QT 的某个版本。为了代码跨平台你希望选择同一版本的 QT。你希望使用较新版本的 QT而麒麟系统或统信 UOS 系统的 QT 库相对较老。
下载 QT 源码
QT 系统庞大而且复杂除了 QT 框架还有 QT Creator、QT Designer 之类的开发工具所以要看准 QT 库不要下错了。QT 库的链接 https://download.qt.io/archive/qt/ 选择你要使用的 QT 版本。在本专栏中我都是使用 5.15.2 这个版本这是一个 LTS长期支持 版本也是最后一个支持 Windows 7 的版本。
先点击 5.15 这个链接接下来点击 5.15.2 这个链接再点击 single 链接进入源码下载 根据喜好选择 zip 包或者 tar 包下载其中一个即可。
这里以 qt-everywhere-src-5.15.2.tar.xz 为例。
交叉编译 QT 源码
解压 QT 源码
tar xvf qt-everywhere-src-5.15.2.tar.xz可以看到 qt-everywhere 源码中包含了几乎所有的 QT 模块。 2. 配置编译选项
配置编译选项有很多可以使用如下的命令查看编译选项
$ ./configure -h因为选项很多这里不一一解释只说明一下我要修改的选项其它的使用默认值。
-prefix dir 编译后的库文件安装路径前缀一般是 /usr/local/Qt-$QT_VERSION我不希望将 ARM版 QT 安装到系统目录避免和 x86 版的 QT 混淆所以指定别的路径。
-xplatform target 选择交叉工具链这里使用 linux-arm-gnueabi-g
-opensource 构建开源版 QT
-confirm-license 自动确认许可证
-no-opengl 禁用 OpenGL 支持
-skip module 如果某个模块不需要或编译不过可以先不编译最终的配置命令为
./configure -prefix /work/mywork/qt-in-action/qt-arm -xplatform linux-arm-gnueabi-g -opensource -confirm-license -no-opengl -skip location编译
根据你的 CPU 核数量决定并行编译的任务数不确定的话不需要带 -j 参数
make -j12这个编译过程会比较长先喝杯咖啡吧
安装
make install我之前指定的安装路径是 /work/mywork/qt-in-action/qt-arm进入到这个目录可以看到如下文件 其中 include 为头文件lib 为编译出来的 QT 库开发 ARM 架构 QT 应用程序主要用到这两个目录下的文件。我们可以查看一下 Qt 库文件的信息
$ file libQt5Core.so.5.15.2
libQt5Core.so.5.15.2: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, for GNU/Linux 3.17.0, BuildID[sha1]17cb846340306bae3fca72a8e65189b775cc7f02, stripped可以看出确实是 ARM 架构的库文件。
Qt Creator交叉编译配置
开发 QT 应用程序最推荐 Qt Creator。虽然有 VS Code 这样的万能开发工具但 Qt Creator 速度快集成源码编译、调试使用起来更顺手。
Qt Creator 默认使用的是系统工具链要支持开发 ARM 应用程序还需要配置交叉工具链。
配置 Qt Creator Kits
打开 Qt Creator然后点击菜单项 Tool | Option 点击左上的 Kits然后点击 Qt Versions接着点击 Add 在弹出的文件选择对话框中选择上一步所编译出的 Qt qmake 文件在 bin 目录下。 接下来配置编译器。 主要是要设置编译器的路径这里使用系统的交叉工具链然后点击 Apply。 再点击 Kits Tab然后点击右边的 Add。 指定一个名称C 编译器选择前面配置的 ARM-GCCQt Version 选择全面配置的 Qt 5.15.2(qt-arm)然后点击 OK大功告成。
创建一个测试项目
Qt环境搭建好了可以新建一个项目试试。
点击菜单项 File | New File or Project … 打开新建工程向导。这里新建一个 Qt GUI 应用程序。 项目命名为 FirstArmApp指定项目目录。 这一步 Kit Selection要选择我们在上一步新建的 Kit ARM Qt 5.15.2。 项目建立起来后可以右键点击项目然后点击 Build。 项目构建完毕后我们可以在 build-FirstArmApp-ARM_Qt_5_15_2-Debug 目录看到我们编译出来的第一个 QT ARM 应用程序。
需要注意的是这个编译出来的 QT 应用程序不能直接在 X86 的 Ubuntu 系统上运行CPU 架构不同我们可以查看文件信息。 把这个应用程序复制到 ARM 版的麒麟或 UOS 系统上就可以运行。
小结
本文首先介绍了交叉编译的概念接着介绍了在 Ubuntu Linux 系统上安装 ARM 交叉编译工具链并使用 ARM 交叉编译工具链编译 QT 源码得到了 ARM 版的 QT 库最后介绍在 Qt Creator 中配置交叉工具链并使用配置的交叉工具链编译出第一个 ARM 架构 QT 应用程序。