web-dev-qa-db-ja.com

MinGWエラー:「スレッド」は「std」のメンバーではありません

私は単純なアプリケーションをWindows用にクロスコンパイルしようとしています:

#include <thread>

void Func(){
  return;
}

int main(){
  std::thread thr1(Func);
  thr1.detach();
  return 0;
}

そして、それは私が得るものです:

$ i686-w64-mingw32-g++ -static-libstdc++ -static-libgcc -pipe -g -std=c++0x ./threadstutor.cpp 
./threadstutor.cpp: In function ‘int main()’:
./threadstutor.cpp:8:3: error: ‘thread’ is not a member of ‘std’
./threadstutor.cpp:8:15: error: expected ‘;’ before ‘thr1’
./threadstutor.cpp:9:3: error: ‘thr1’ was not declared in this scope

実際、Ubuntu用のg ++​​でコンパイルする場合、このコードにはそのような問題はありません。しかし、Windows用にクロスコンパイルする必要があり、ここで行き詰まっています。

15
Hi-Angel

このエラーは、使用しているSTLにC++ 11のすべての機能が含まれていないことを意味します。

WindowsでC++ 11スレッドにアクセスするには、posix-threadsを使用したMingwのビルドが必要です。ここには、Mingw-Builds v4.8.1: http://sourceforge.net/projects/mingwbuilds/files/Host-windows/releases/4.8.1/64-bit/threads-があります。 posix/sjlj /

13
Sergey K.

すでにより良いオプションがあります: https://github.com/meganz/mingw-std-threads これは、MinGWで最もよく使用されるスレッド化と同期のC++ 11クラスの軽量のwin32ネイティブ実装です。これらは、システムライブラリと共存できるヘッダーのみのライブラリに実装されています。 Windows XPもサポートしますが、これには条件変数の直接の類似点はありません。

16