参考
- 树莓派4 + Qt5.14 PC端交叉编译
- Windows10下 交叉编译aarch64(ARMv8)架构Qt5.12.11库
一、QT源码下载
Qt 源码下载:http://download.qt.io/archive/qt/,源码在 single 文件夹中
二、交叉编译器下载安装
arm交叉编译工具链是用于在一种平台上编译出能运行在体系结构不同的另一种平台上的程序,比如在PC平台(X86 CPU)上编译出能运行在以ARM为内核的CPU平台上的程序,编译得到的程序在X86 CPU平台上是不能运行的,必须放到ARM CPU平台上才能运行,虽然两个平台用的都是Linux系统。
1. 分类和说明
从授权上,分为免费授权版和付费授权版。 免费版目前有三大主流工具商提供,第一是GNU(提供源码,自行编译制作),第二是 Codesourcery,第三是Linora。 收费版有ARM原厂提供的armcc、IAR提供的编译器等等,因为这些价格都比较昂贵,不适合学习用户使用,所以不做讲述。
- arm-none-linux-gnueabi-gcc:是 Codesourcery 公司(目前已经被Mentor收购)基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARM(32位)系统中所有环节的代码,包括裸机程序、u-boot、Linux kernel、filesystem和App应用程序。
- arm-linux-gnueabihf-gcc:是由 Linaro公司基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARM(32位)系统中所有环节的代码,包括裸机程序、u-boot、Linux kernel、filesystem和App应用程序。
- aarch64-linux-gnu-gcc:是由 Linaro 公司基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARMv8 64位目标中的裸机程序、u-boot、Linux kernel、filesystem和App应用程序。
- arm-none-elf-gcc:是 Codesourcery公司(目前已经被Mentor收购)基于GCC推出的的ARM交叉编译工具。可用于交叉编译ARM MCU(32位)芯片,如ARM7、ARM9、Cortex-M/R芯片程序。
- arm-none-eabi-gcc:是 GNU 推出的的ARM交叉编译工具。可用于交叉编译ARM MCU(32位)芯片,如ARM7、ARM9、Cortex-M/R芯片程序
2. 下载
Linaro GNU
Linaro GNU Toolchain
ARM GNU
Arm GNU Toolchain
hosted 表示的是在哪个系统下编译程序,x86_64 Linux hosted cross compilers的中文意思是:编译环境为64位Linux系统的交叉编译器。 target 表示的是编译出来的程序要在哪个平台下运行。
- AArch32 bare-metal target (arm-none-eabi) 是说运行环境是32位的ARM芯片,且编译的是裸机(bare-metal)程序。
- AArch32 target with hard float (arm-linux-none-gnueabihf) 同样是运行环境为32位的ARM芯片,但他带了linux字样,说明是用于编译linux下的应用程序的。
- AArch64 ELF bare-metal target (aarch64-none-elf) 是编译64位ARM芯片的裸机程序的。
- AArch64 GNU/Linux target (aarch64-none-linux-gnu) 是编译64位ARM芯片的Linux应用程序的。
- AArch64 GNU/Linux target (aarch64_be-none-linux-gnu) 也是编译64位ARM芯片的Linux应用程序的,但是程序采用的字节序为大端序(be是big endian的缩写)。
上面所说的编译器里面,不带linux字样的,只能编译裸机程序。uboot、linux内核、linux模块属于裸机程序。带linux字样的,既可以编译裸机程序,又可以编译linux应用程序。也就是说uboot、linux内核、linux驱动、busybox文件系统里面的程序,都能编译。
3. 安装
下载后解压到指定目录 设置环境变量
export PATH="/xxx/gcc-linaro-11.2.1-2022.02-x86_64_aarch64-linux-gnu/bin:$PATH"
4. 使用命令安装
提示:与上面的下载安装不同时使用,选择一种即可
sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
二、QT 编译
1. 配置交叉编译环境
我使用的是Xilinx Vitis带的交叉编译工具:
source /XXX/Xilinx/Vitis/2020.2/settings64.sh
2. QT 配置编译安装
(1)在qt源码同目录中新建 build 和 install 目录:
(2)build 目录中 新建 build.sh 文件,内容如下:
#!/bin/sh
../qt-everywhere-src-5.14.2/configure \
-xplatform linux-aarch64-gnu-g++ \
-verbose \
-shared \
-release \
-opensource \
-confirm-license \
-make libs \
-optimize-size \
-nomake tests \
-nomake examples \
-no-opengl \
-skip qtquick3d \
--prefix=/opt/Qt-5.14.2 \
--extprefix=$(pwd)/../install/Qt-5.14.2 \
--hostprefix=$(pwd)/../install/Qt-5.14.2-Host
exit
参数说明: -xplatform : 选择交叉编译时的目标(qtbase/mkspecs/目录中目标平台) -prefix:Qt最终安装到Arm板中的位置 -extprefix:PC上交叉编译好的Qt的位置 -hostprefix:编译出来给PC用的交叉编译工具存放的位置 -verbose:打印配置过程中步骤信息 -opensource:编译Qt的开源版本 -confirm-license:自动确认许可 -release:编译Qt的release版本 -shared:构建 Qt 共享库,-static 静态库 -make libs:编译 lib 组件 -nomake tests:不编译 tests组件 -nomake examples:不编译 examples 组件 -skip ,跳过不需要的模块 -no-opengl: 我在虚拟机下编译opengl模块报错,未解决 所以选择不编译
(3)运行配置:
chmod +x ./build.sh
./build
(4)报错:可以忽略
(5)配置完成:
(6)编译和安装:
make
make install
三、Windows下 QT 交叉编译
1. 参考
2. 磁盘切换
cd d: 无法切换到d盘 正确切换d盘,直接d:
D:
cd E:\Source\qt-everywhere-src-5.14.2\build
3. 配置交叉编译环境
C:\Xilinx\Vitis\2020.2\.settings64-Vitis.bat
3. 配置QT
新建 build.bat 脚本,内容如下:
@echo off
../qt-everywhere-src-5.14.2/configure.bat ^
-platform win32-g++ ^
-xplatform linux-aarch64-gnu-g++ ^
-verbose ^
-shared ^
-release ^
-opensource ^
-confirm-license ^
-make libs ^
-optimize-size ^
-nomake tests ^
-nomake examples ^
-no-opengl ^
-skip qtquick3d ^
--prefix=%cd%\..\install\Qt-5.14.2-ARM ^
--extprefix=%cd%\..\install\Qt-5.14.2 ^
--hostprefix=%cd%\..\install\Qt-5.14.2-Host
exit /b %err%
运行:
build.bat
4. 编译安装 QT
mingw32-make
mingw32-make install
4. 错误及解决
报错:
'perl' 不是内部或外部命令,也不是可运行的程序
解决:
set path=C:\Perl64\bin;%path%;
其他异常问题:删除配置编译生成文件,重新配置编译
|