在Linux上使用mingw交叉编译c ++ 11线程

时间:2013-07-12 23:07:13

标签: linux windows multithreading c++11 mingw

我尝试用Linux上的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 ++。

谢谢,

regars 凯文

-edit -

我刚刚在互联网上的某个地方下载了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)

问候 凯文

3 个答案:

答案 0 :(得分:1)

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

具体而言,_GLIBCXX_HAS_GTHREADS未定义,并且标题线程中的类线程需要它。 (它建立在gthreads上)。

你应该尝试使用boost :: thread来获得win / linux兼容的线程类

答案 1 :(得分:1)

已经存在std :: thread和sync原语的本机实现,它适用于任何C ++ 11版本的MinGW: https://github.com/meganz/mingw-std-threads

答案 2 :(得分:-1)

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