交叉编译QT 源码
板子:全志 V3S , arm32位cpu
- ubuntu 虚拟机搭建好交叉编译链环境,添加环境变量
ok3399@ubuntu:~$ echo $PATH
/opt/OK3399-linux-release/host/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/media/user1/V3SSDK_BUILDROOT/v3ssdk/buildroot/out/host/bin/
-
使用arm-linux-gcc -v 确认编译工具安装OK
-
解压QT源码
ok3399@ubuntu:/opt/qt/qt-5.13.1S-src$ ls
build.sh LICENSE.FDL qtdatavis3d qtquickcontrols qtwayland
_clang-format LICENSE.GPLv2 qtdeclarative qtquickcontrols2 qtwebchannel
coin LICENSE.GPLv3 qtdoc qtremoteobjects qtwebengine
config.cache LICENSE.LGPLv21 qtgamepad qtscript qtwebglplugin
config.log LICENSE.LGPLv3 qtgraphicaleffects qtscxml qtwebsockets
config.opt LICENSE.QT-LICENSE-AGREEMENT-4.0 qtimageformats qtsensors qtwebview
config.status Makefile qtlocation qtserialbus qtwinextras
config.summary qt3d qtlottie qtserialport qtx11extras
config.tests qtactiveqt qtmacextras qtspeech qtxmlpatterns
configure qtandroidextras qtmultimedia qtsvg README
configure.bat qtbase qtnetworkauth qttools
configure.json qtcharts qt.pro qttranslations
gnuwin32 qtconnectivity qtpurchasing qtvirtualkeyboard
- 复制 make spec 文件
将 linux-arm-gnueabi-g++ 文件夹 复制为新的 arm-linux-g++(和编译器同名)文件夹,不要修改qt源码自带的。
ok3399@ubuntu:/opt/qt/qt-5.13.1S-src/qtbase/mkspecs$ ls
aix-g++ integrity-armv7 linux-icc-k1om qdevice.pri win32-clang-msvc
aix-g++-64 integrity-armv7-imx6 linux-llvm qmodule.pri win32-g++
android-clang integrity-armv8-rcar linux-lsb-g++ qnx-aarch64le-qcc win32-icc
android-g++ integrity-x86 lynxos-g++ qnx-armle-v7-qcc win32-icc-k1om
arm-linux-g++ linux-aarch64-gnu-g++ macx-clang qnx-x86-64-qcc win32-msvc
common linux-arm-gnueabi-g++ macx-g++ qnx-x86-qcc winrt-arm64-msvc2017
cygwin-g++ linux-clang macx-icc solaris-cc winrt-arm64-msvc2019
darwin-g++ linux-clang-32 macx-ios-clang solaris-cc-64 winrt-arm-msvc2015
devices linux-clang-libc++ macx-tvos-clang solaris-cc-64-stlport winrt-arm-msvc2017
dummy linux-clang-libc++-32 macx-watchos-clang solaris-cc-stlport winrt-arm-msvc2019
features linux-g++ macx-xcode solaris-g++ winrt-x64-msvc2015
freebsd-clang linux-g++-32 modules solaris-g++-64 winrt-x64-msvc2017
freebsd-g++ linux-g++-64 modules-inst unsupported winrt-x64-msvc2019
haiku-g++ linux-icc netbsd-g++ wasm-emscripten winrt-x86-msvc2015
hpuxi-g++-64 linux-icc-32 openbsd-g++ win32-arm64-msvc2017 winrt-x86-msvc2017
hurd-g++ linux-icc-64 qconfig.pri win32-clang-g++ winrt-x86-msvc2019
- 在copy的make spec 修改 即arm-linux-g++ 下的qmake.conf
ok3399@ubuntu:/opt/qt/qt-5.13.1S-src/qtbase/mkspecs/arm-linux-g++$ ls
qmake.conf qplatformdefs.h
修改后如下,使用交叉编译器的绝对路径设置 QMAKE_CC。。。,否则可能会找不到编译器
#
# qmake configuration for building with arm-linux-gnueabi-g++
#MAKEFILE_GENERATOR = UNIX
CONFIG += incremental
QMAKE_INCREMENTAL_STYLE = sublibinclude(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)# modifications to g++.conf
QMAKE_CC = /media/user1/V3SSDK_BUILDROOT/v3ssdk/buildroot/out/host/bin/arm-linux-gcc
QMAKE_CXX = /media/user1/V3SSDK_BUILDROOT/v3ssdk/buildroot/out/host/bin/arm-linux-g++
QMAKE_LINK = /media/user1/V3SSDK_BUILDROOT/v3ssdk/buildroot/out/host/bin/arm-linux-g++
QMAKE_LINK_SHLIB = /media/user1/V3SSDK_BUILDROOT/v3ssdk/buildroot/out/host/bin/arm-linux-g++# modifications to linux.conf
QMAKE_AR = /media/user1/V3SSDK_BUILDROOT/v3ssdk/buildroot/out/host/bin/arm-linux-ar cqs
QMAKE_OBJCOPY = /media/user1/V3SSDK_BUILDROOT/v3ssdk/buildroot/out/host/bin/arm-linux-objcopy
QMAKE_NM = /media/user1/V3SSDK_BUILDROOT/v3ssdk/buildroot/out/host/bin/arm-linux-nm -P
QMAKE_STRIP = /media/user1/V3SSDK_BUILDROOT/v3ssdk/buildroot/out/host/bin/arm-linux--strip
load(qt_config)
- 编写构建脚本, 在 src 目录下,地步可以看到 我的 build.sh
#!/bin/sh
./configure -confirm-license \-xplatform arm-linux-g++\-opensource \-verbose \-skip qt3d \-skip qtquickcontrols \-skip qtwebchannel \-skip qtactiveqt \-skip qtandroidextras \-skip qtdeclarative \-skip qtimageformats \-skip qtmacextras \-skip qtx11extras \-skip qtxmlpatterns \-skip qtconnectivity \-skip qtdoc \-skip qtgraphicaleffects \-skip qtlocation \-skip qtmultimedia \-skip qtsensors \-skip qttools \-skip qttranslations \-skip qtwayland \-skip qtwebchannel \-skip qtwebengine \-skip qtwinextras \-no-opengl \-widgets \-prefix /opt/qt/qt_v3s
-xplatform 是目标平台,使用交叉编译器的名字即可(第六步 mkspc 文件夹名字)。
-prefix /opt/qt/qt_v3s 编译后qt存放位置
- 执行build脚本后,根据提示进行 make , make install 生成文件确认
ok3399@ubuntu:/opt/qt/qt_v3s$ ls
bin doc examples include lib mkspecs plugins