Qt 交叉编译详细配置指南

一、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-