【问题标题】:cross-compiling c++11 threads with mingw on linux在 Linux 上使用 mingw 交叉编译 c++11 线程
【发布时间】:2013-07-12 23:07:12
【问题描述】:

我尝试在 linux for windows 上使用 mingw 交叉编译一些 c++11 源代码。代码使用 std::thread。

当我编译时,我总是得到一些错误:

$ ../mingw/cross/bin/i686-w64-mingw32-g++  -std=c++11 -I include/ test.cpp -lstdthread -otest
In file included from test.cpp:4:0:
...
error: 'thread' in namespace 'std' does not name a type
...

我可以在 mingw 中启用 c++11 线程吗?使用本地 g++ 编译代码没有任何问题。

谢谢,

问候 凯文

-编辑-

我刚刚在互联网的某个地方下载了 mingw,因为我试图获得尽可能新的版本:

../mingw/cross/bin/i686-w64-mingw32-g++  -v
Using built-in specs.
COLLECT_GCC=../mingw/cross/bin/i686-w64-mingw32-g++
COLLECT_LTO_WRAPPER=/home/bmeier/source/mingw/cross/bin/../libexec/gcc/i686-w64-mingw32/4.8.1/lto-wrapper
Target: i686-w64-mingw32
Configured with: /home/drangon/work/mingw-w64-dgn_32/source/gcc-4.8.1/configure --target=i686-w64-mingw32 --disable-nls --disable-multilib --with-gmp=/home/drangon/work/mingw-w64-dgn_32/build/for_cross --with-mpfr=/home/drangon/work/mingw-w64-dgn_32/build/for_cross --with-mpc=/home/drangon/work/mingw-w64-dgn_32/build/for_cross --with-isl=/home/drangon/work/mingw-w64-dgn_32/build/for_cross --with-cloog=/home/drangon/work/mingw-w64-dgn_32/build/for_cross --enable-languages=c,c++,objc,obj-c++ --disable-libstdcxx-pch --prefix=/home/drangon/work/mingw-w64-dgn_32/cross --with-sysroot=/home/drangon/work/mingw-w64-dgn_32/cross
Thread model: win32
gcc version 4.8.1 (GCC)

问候 凯文

【问题讨论】:

  • gcc 是否支持 mingw 上的 c++11 线程?
  • 您使用的是哪个版本的 MinGW GCC? ../mingw/cross/bin/i686-w64-mingw32-g++ -v 的输出是什么?而且在 Linux 系统上交叉编译通常更容易(所以也许在你的机器上安装一个 Linux)
  • 我刚刚在开始帖子中写了版本输出。我总是使用 linux 来交叉编译:-) 现在也是。我用的是xubuntu。感谢您的帮助
  • std::thread is not a member of namespace std using Eclipse Kepler MinGW 的可能重复项 不准确,但答案相同。

标签: linux windows multithreading c++11 mingw


【解决方案1】:

已经有一个原生的 std::thread 和同步原语实现,它适用于任何 C++11 版本的 MinGW: https://github.com/meganz/mingw-std-threads

【讨论】:

    【解决方案2】:

    基本上MinGW不支持windows上的线程见以下链接:http://www.cplusplus.com/forum/windows/82461/

    特别是 _GLIBCXX_HAS_GTHREADS 没有定义,头线程中的类线程需要它。 (它建立在 gthreads 上)。

    您应该尝试将 boost::thread 用于与 win/linux 兼容的线程类

    【讨论】:

      【解决方案3】:

      您很可能忘记包含线程标题#include <thread>

      【讨论】:

        猜你喜欢
        • 2011-04-18
        • 1970-01-01
        • 2015-05-13
        • 2013-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多