使用MXE gcc构建Qt应用程序时缺少std::互斥锁
std::mutex missing when building Qt app with MXE gcc
我试图从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
相关文章:
- 理解GCC中的std::pow实现
- GCC 问题与 static_cast<std::u16string>
- std::unique_ptr 在 GCC 中工作,但不能在 Visual Studio 中编译
- GCC 8.3 无法编译 std::bind_front
- 为什么 GCC 不能假设 std::vector::size 在这个循环中不会改变?
- 使用 MINGW gcc 编译时,不会为 std::string 调用重载的新运算符
- 为什么 std::count 比 MSVC 编译器的普通循环慢,但与 GCC 相等?
- 没有'str'成员在 GCC 和 Clang 'std::basic_ostream<char>',但 MSVC 没有问题
- 带有引用的std::tuple在clang中编译失败,但在gcc中编译失败
- 使用 std::addressof 时出现 GCC 7 编译错误
- 为什么 std::locale( " " ).name() 在 clang 和 gcc 上给出不同的结果?
- C++ GCC 错误:"sqrtl"不是"std"的成员
- 它是 gcc 中 std::valarray 实现的错误吗?
- 为什么 std::p ackage_task 无法在 GCC 上调用
- 是否有 GCC 警告,用于使用 C 库中的符号而不是通过命名空间 std?
- 在使用 -std=c++17 编译时在 GCC 中复活 std::auto_ptr
- 将 cctype 函数分配给 std::function,gcc 编译错误
- 错误:命名空间"std"中没有名为"invoke_result_t"的类型 GCC-7
- `noexcept`函数中的std :: terminate`调用函数有限-GCC vs clang codegen
- std::可选的默认构造函数不是 gcc 中的 constexpr?