一、Qt 交叉编译详细配置
1. 准备工作
1.1 安装交叉编译工具链
# 例如安装ARM工具链(Ubuntu/Debian)
sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
# 或者64位ARM
sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
1.2 准备目标系统根文件系统(sysroot)
# 创建sysroot目录结构
mkdir -p /opt/sysroot/{usr/lib,usr/include,lib}
# 从目标设备复制库文件(假设通过ssh连接)
rsync -avz root@target-device:/lib /opt/sysroot/
rsync -avz root@target-device:/usr/lib /opt/sysroot/usr/
rsync -avz root@target-device:/usr/include /opt/sysroot/usr/
2. Qt 源码配置
2.1 下载Qt源码
wget https://download.qt.io/official_releases/qt/5.15/5.15.2/single/qt-everywhere-src-5.15.2.tar.xz
tar xf qt-everywhere-src-5.15.2.tar.xz
cd qt-everywhere-src-5.15.2
2.2 创建自定义mkspec文件(可选)
如果现有mkspec不满足需求,可以创建自定义配置:
cp -r qtbase/mkspecs/linux-arm-gnueabi-g++ qtbase/mkspecs/linux-custom
编辑qtbase/mkspecs/linux-custom/qmake.conf
:
MAKEFILE_GENERATOR = UNIX
CONFIG += incremental
QMAKE_INCREMENTAL_STYLE = sublib
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
# 修改以下内容匹配你的工具链
QMAKE_CC = arm-linux-gnueabihf-gcc
QMAKE_CXX = arm-linux-gnueabihf-g++
QMAKE_LINK = arm-linux-gnueabihf-g++
QMAKE_LINK_SHLIB = arm-linux-gnueabihf-g++
# 目标平台设置
QMAKE_AR = arm-linux-gnueabihf-ar cqs
QMAKE_OBJCOPY = arm-linux-gnueabihf-objcopy
QMAKE_NM = arm-linux-gnueabihf-nm -P
QMAKE_STRIP = arm-linux-gnueabihf-strip
# 链接器标志
QMAKE_LFLAGS += -Wl,-rpath-link,/opt/sysroot/usr/lib
3. 详细配置命令
3.1 基本交叉编译配置
./configure \
-prefix /opt/qt5-arm \
-xplatform linux-custom \ # 使用自定义mkspec
-sysroot /opt/sysroot \
-confirm-license \
-opensource \
-release \
-no-opengl \
-no-xcb \
-no-eglfs \
-no-pch \
-nomake examples \
-nomake tests \
-skip qtdoc \
-skip qtquickcontrols2 \
-skip qtwebengine \
-v
3.2 高级配置选项
图形后端选择
# 使用FBDEV(帧缓冲)
-opengl es2 -linuxfb
# 或使用Wayland
-feature-wayland -no-xcb
库依赖配置
# 使用系统库(需在sysroot中存在)
-system-zlib \
-system-libjpeg \
-system-libpng \
-system-pcre \
-system-freetype \
-system-harfbuzz
# 或使用Qt内置库
-qt-zlib \
-qt-libpng \
-qt-libjpeg \
-qt-pcre \
-qt-freetype \
-qt-harfbuzz
功能模块控制
# 启用/禁用特定模块
-qt-sqlite \
-no-openssl \
-no-dbus \
-no-icu \
-no-glib \
-no-cups \
-no-iconv \
-no-tslib
4. 环境变量设置
建议在配置前设置这些环境变量:
export PATH=/path/to/toolchain/bin:$PATH
export CROSS_COMPILE=arm-linux-gnueabihf-
export CC=${CROSS_COMPILE}gcc
export CXX=${CROSS_COMPILE}g++
export AR=${CROSS_COMPILE}ar
export LD=${CROSS_COMPILE}ld
export STRIP=${CROSS_COMPILE}strip
export RANLIB=${CROSS_COMPILE}ranlib
# 链接器标志
export LDFLAGS="-Wl,-rpath-link,/opt/sysroot/usr/lib -Wl,-rpath-