使用 MXE gcc 构建 Qt 应用程序时缺少 std::mutex

Posted

技术标签:

【中文标题】使用 MXE gcc 构建 Qt 应用程序时缺少 std::mutex【英文标题】:std::mutex missing when building Qt app with MXE gcc 【发布时间】:2015-08-05 11:52:53 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

【参考方案2】:

POSIX 配置已添加到 MXE (Building pthreads inline with gcc and enable optional posix threads in libgcc)。

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

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

【讨论】:

以上是关于使用 MXE gcc 构建 Qt 应用程序时缺少 std::mutex的主要内容,如果未能解决你的问题,请参考以下文章

Linux下编译静态MinGW环境,编译windows平台Qt程序(使用MXE)

在 Ubuntu for Windows 上构建 QT5 项目

arm-linux-gcc xx.c 缺少libstdc++.so.6

如何为 MXE 交叉编译器编译 Berkeley DB 5.3.28?

Mac 上的 qmake 缺少 qt-creator

缺少在 Mac OSX Lion/make 上安装 Qt