做网站如何接单,上市公司查询网站,软文世界官网,基本的网站开发技术路线问题描述
我想使用Linux x86_64主机为Windows x86_64目标交叉编译Qt库#xff08;最终也包括我的应用程序#xff09;。我觉得自己已经接近成功了#xff0c;但可能对整个过程有一些基本的误解。
我从在我的Fedora机器上安装所有mingw包开始#xff0c;并修改了win32-g的…问题描述
我想使用Linux x86_64主机为Windows x86_64目标交叉编译Qt库最终也包括我的应用程序。我觉得自己已经接近成功了但可能对整个过程有一些基本的误解。
我从在我的Fedora机器上安装所有mingw包开始并修改了win32-g的qmake.conf文件以适应我的环境。然而我似乎在Qt的某些显而易见的配置选项上遇到了问题-platform和-xplatform。Qt文档说-platform应该是主机架构你正在编译的机器而-xplatform应该是你希望部署的目标平台。在我的情况下我设置了-platform linux-g-64和-xplatform linux-win32-g其中linux-win32-g是我修改过的win32-g配置。
我的问题是在使用这些选项执行配置后我看到它调用了我系统的编译器而不是交叉编译器x86_64-w64-mingw32-gcc。如果我省略了-xplatform选项并将-platform设置为我的目标规范linux-win32-g它会调用交叉编译器但在发现一些与Unix相关的函数未定义时出错。
某次尝试的输出 Pastebin链接
问题
当从Linux主机为Windows交叉编译Qt时本地编译器是否会被调用也就是说在交叉编译过程中我们应该仅使用交叉编译器吗我不明白为什么在指定-xplatform选项时Qt的配置脚本会调用我系统的本地编译器。如果我使用的是mingw交叉编译器什么时候需要处理一个specs文件GCC的specs文件对我来说仍然很神秘我想知道一些相关背景是否会有所帮助。一般来说除了在我的qmake.conf中指定一个交叉编译器外我还需要考虑什么
答案整理
答案1使用MXE进行交叉编译 跨平台编译Qt的一个简便方法是使用MXEM cross environment。步骤如下 获取MXE git clone https://github.com/mxe/mxe.git安装构建依赖。 构建Qt及其依赖项和交叉构建工具这大约需要一小时 cd mxe make qt将交叉构建工具添加到你的PATH环境变量中 export PATHmxe root/usr/bin:$PATH使用qmake生成Makefile并构建 mxe root/usr/i686-pc-mingw32/qt/bin/qmake make你应该能在./release目录下找到二进制文件 wine release/foo.exe答案2使用Archlinux的MinGW-w64工具链 另一个方法是在基于Arch的系统上使用MinGW-w64工具链 安装必要的软件包 yay -Sy mingw-w64-qt5-base mingw-w64-boost在项目目录中使用交叉编译工具进行构建 x86_64-w64-mingw32-qmake-qt5
make部署时需要将对应的dll文件复制到你的可执行文件目录中。
注意事项
在配置Qt时如果遇到idc相关问题添加-skip qtactiveqt参数可以跳过这些问题。在配置过程中本地主机的编译器可能会被调用用于构建一些必要的工具例如qmake。
cd qt_source_directory
mkdir my_build
cd my_build
../configure \-release \-opensource \-no-compile-examples \-platform linux-g-64 \-xplatform win32-g \-device-option CROSS_COMPILE/usr/bin/x86_64-w64-mingw32- \-skip qtactiveqt \-v结论
交叉编译Qt从Linux到Windows涉及指定正确的配置参数并确保交叉编译器被正确调用。使用像MXE或Archlinux的MinGW-w64工具链能简化这个过程避免许多潜在的问题。