2

我正在尝试从针对 Windows 的 linux 下的命令行构建 Qt 应用程序。我已经使用 mxe 构建了一个针对 Windows 的工具链,但是我的构建失败了,因为各种线程相关的位。mxe 使用 winpthreads 构建,我知道 Qt 项目将使用预打包的 mingw 编译器从创建者内部构建在 windows 本身上。我正在使用我的 ARM Linux 交叉编译器成功构建,所以我只想让 windows 完成同样的工作。我正在尝试在构建服务器上或从 Jenkins 为我的所有目标构建一条线路。

我猜我在进行跨工具链构建时遗漏了一些我需要传递给 mxe 的东西,或者遗漏了我需要传递给 qmake 以使这个构建成功的东西。

4

2 回答 2

3

问题在于使用 win32 线程而不是 mingws pthreads 实现的 GCC 的默认 MXE 构建。

编辑 src/gcc.mk 并确保将 winpthreads 添加到 $(PKG)_DEPS 列表,然后更改配置行,使 --enable-threads=win32 变为 --enable-threads=posix。

然后重新制作winpthreads和gcc。注意这里有一个循环依赖,你需要先用win32线程(默认)构建gcc,然后用winpthreads重新制作。

感谢 Andreia Gaita - http://blog.worldofcoding.com/2014/05/cross-compiling-c11-without-going-madder.html

于 2015-08-05T12:56:43.233 回答
0

POSIX 配置已添加到 MXE(使用 gcc 构建 pthreads 并在 libgcc 中启用可选的 posix 线程)。

例如,用它(x64、shared、posix 线程)构建 qt:

make MXE_TARGETS='x86_64-w64-mingw32.shared.posix' qt
于 2016-09-09T19:56:31.197 回答