使用MXE gcc构建Qt应用程序时缺少std::互斥锁

std::mutex missing when building Qt app with MXE gcc

本文关键字:std gcc MXE 构建 Qt 应用程序 使用      更新时间:2023-10-16

我试图从linux下针对windows的命令行构建一个Qt应用程序。我已经使用mxe构建了一个针对窗口的工具链,但是我的构建失败了,抱怨各种线程相关的位。我知道Qt项目将建立在windows本身的创造者内部,使用预包装的mingw编译器。我成功地构建使用我的ARM Linux交叉编译器,所以我只是想让windows做同样的。我正试图在构建服务器或Jenkins上为我的所有目标获得一行构建。

我猜我错过了一些东西,我需要传递给mxe时做交叉工具链构建或者缺少一些东西,我需要传递给qmake这个构建成功。

问题是GCC默认的MXE版本使用win32线程,而不是mingws的pthreads实现。

编辑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

POSIX配置被添加到MXE(在libgcc中内置pthreads并启用可选的POSIX线程)。

例如,要构建qt (x64,共享,posix线程):

make MXE_TARGETS='x86_64-w64-mingw32.shared.posix' qt