Linux下 Qt-5.14.2 交叉编译


参考

  1. 树莓派4 + Qt5.14 PC端交叉编译
  2. 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%;

其他异常问题:删除配置编译生成文件,重新配置编译

  • 3
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Command line: -prefix /home/liuyh/workspace/qt5.14.2-arm -opensource -confirm-license -release -strip -shared -xplatform linux-arm-gnueabi-g++ -optimized-qmake -c++std c++11 --rpath=no -pch -skip qt3d -skip qtactiveqt -skip qtandroidextras -skip qtcanvas3d -skip qtconnectivity -skip qtdatavis3d -skip qtdoc -skip qtgamepad -skip qtlocation -skip qtmacextras -skip qtnetworkauth -skip qtpurchasing -skip qtremoteobjects -skip qtscript -skip qtscxml -skip qtsensors -skip qtspeech -skip qtsvg -skip qttools -skip qttranslations -skip qtwayland -skip qtwebengine -skip qtwebview -skip qtwinextras -skip qtx11extras -skip qtxmlpatterns -make libs -make examples -nomake tools -nomake tests -gui -widgets -dbus-runtime --glib=no --iconv=no --pcre=qt --zlib=qt -no-openssl --freetype=qt --harfbuzz=qt -no-opengl -linuxfb --xcb=no -tslib --libpng=qt --libjpeg=qt --sqlite=qt -plugin-sql-sqlite -I/opt/tslib/include -L/opt/tslib/lib -recheck-all executing config test machineTuple + arm-linux-gnueabi-g++ -dumpmachine > sh: 1: arm-linux-gnueabi-g++: not found test config.qtbase.tests.machineTuple FAILED executing config test verifyspec + cd /home/liuyh/workspace/QT5.14.2/qt-everywhere-src-5.14.2/config.tests/verifyspec && /home/liuyh/workspace/QT5.14.2/qt-everywhere-src-5.14.2/qtbase/bin/qmake "CONFIG -= qt debug_and_release app_bundle lib_bundle" "CONFIG += shared warn_off console single_arch" 'QMAKE_LIBDIR += /opt/tslib/lib' 'INCLUDEPATH += /opt/tslib/include' -early "CONFIG += cross_compile" /home/liuyh/workspace/QT5.14.2/qt-everywhere-src-5.14.2/qtbase/config.tests/verifyspec + cd /home/liuyh/workspace/QT5.14.2/qt-everywhere-src-5.14.2/config.tests/verifyspec && MAKEFLAGS= /usr/bin/make clean && MAKEFLAGS= /usr/bin/make > rm -f verifyspec.o > rm -f *~ core *.core > arm-linux-gnueabi-g++ -c -O2 -march=armv7-a -mtune=cortex-a7 -mfpu=neon -mfloat-abi=hard -O2 -march=armv7-a -mtune=cortex-a7 -mfpu=neon -mfloat-abi=hard -pipe -O2 -w -fPIC -I/home/liuyh/workspace/QT5.14.2/qt-everywhere-src-5.14.2/qtbase/config.tests/verifyspec -I. -I/opt/tslib/include -I/home/liuyh/workspace/QT5.14.2/qt-everywhere-src-5.14.2/qtbase/mkspecs/linux-arm-gnueabi-g++ -o verifyspec.o /home/liuyh/workspace/QT5.14.2/qt-everywhere-src-5.14.2/qtbase/config.tests/verifyspec/verifyspec.cpp > make:arm-linux-gnueabi-g++:命令未找到 > make: *** [Makefile:172:verifyspec.o] 错误 127
06-09

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值