如何在Linux上交叉编译面向Windows的Qt6并解决工具链不生效问题
Qt 6 Linux 交叉编译到 Windows 报错修复方案
问题根因
Qt 6 已全面切换为 CMake 构建体系,你当前使用的-device-option CROSS_COMPILE、-xplatform等参数均为 Qt 5 qmake 时代的交叉编译配置项,在 Qt 6 中无法被 CMake 识别,因此会出现QT_QMAKE_DEVICE_OPTIONS未使用的警告,CMake 会默认调用系统原生 GCC 工具链编译面向 Windows 平台的代码,最终导致tchar.h等 Windows 专属头文件找不到的报错。
前置检查
- 确认已安装完整的 64 位 MinGW 交叉编译工具链:
sudo apt install gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64 mingw-w64-tools - 确认你预先编译的主机版 Qt 6.2.1 可正常运行(即配置中指定的
/home/papoj/Projects/host_qtbuild路径有效)
调整配置命令
清空原构建目录后,使用以下调整后的 configure 命令,显式通过 CMake 参数指定交叉编译工具链:
./../qt-everywhere-src-6.2.1/configure \ -prefix $PWD/qt6-2.1-win64 \ -platform linux-gcc-64 \ -opensource -confirm-license \ -opengl desktop \ -qt-host-path /home/papoj/Projects/host_qtbuild \ -DCMAKE_SYSTEM_NAME=Windows \ -DCMAKE_C_COMPILER=/usr/bin/x86_64-w64-mingw32-gcc \ -DCMAKE_CXX_COMPILER=/usr/bin/x86_64-w64-mingw32-g++ \ -DCMAKE_RC_COMPILER=/usr/bin/x86_64-w64-mingw32-windres
参数说明:
- 所有
CMAKE_前缀的参数会直接透传给 CMake,强制指定目标系统为 Windows,以及对应的交叉编译工具链路径,解决工具链不切换的问题 - 新增
-confirm-license避免编译过程中触发许可确认交互 - 建议将安装前缀指定为独立目录,方便后续使用
编译安装
配置执行完成后,先检查配置输出的工具链信息,确认 C/C++ 编译器路径为 MinGW 路径而非系统原生/usr/bin/gcc//usr/bin/g++,确认无误后执行编译安装:
cmake --build . --parallel $(nproc) cmake --install .
可选优化配置
如果编译过程中出现模块报错,可以添加跳过不需要的 Qt 模块的参数,减少编译复杂度,比如:
-skip qtwebengine -skip qt3d -skip qtquick3d -skip qtlocation
如果需要静态编译,可以额外添加-static参数,若存在依赖缺失问题,可以通过-DCMAKE_PREFIX_PATH=MinGW依赖库路径指定第三方依赖的安装位置。
内容的提问来源于stack exchange,提问作者papoj
相关产品推荐
相关产品推荐

