交叉编译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 = sublib include(../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)
- 编写构建脚本
#!/bin/sh
./configure -/confirm/i-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 是目标平台,使用交叉编译器的名字即可。
-prefix /opt/qt/qt_v3s 编译后qt存放位置
- 执行build脚本后,根据提示进行 make , make install 生成文件确认
ok3399@ubuntu:/opt/qt/qt_v3s$ ls bin doc examples include lib mkspecs plugins



