Ошибка MinGW: 'thread не является членом' 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
Собственно, этот код не имеет такой проблемы, если компилировать с g++ для Ubuntu; но мне нужно перекрестно скомпилировать для Windows, и здесь я застрял.
Ответы
Ответ 1
Эта ошибка означает, что STL, который вы используете, не содержит всех функций С++ 11.
Для доступа к потокам С++ 11 в Windows вам понадобится сборка Mingw с posix-thread. Здесь вы можете найти Mingw-Builds v4.8.1: http://sourceforge.net/projects/mingwbuilds/files/host-windows/releases/4.8.1/64-bit/threads-posix/sjlj/
Ответ 2
Существует уже лучший вариант:
https://github.com/meganz/mingw-std-threads
Это легкая версия win32, использующая наиболее часто используемые классы потоковой и синхронизирующей С++ 11 для MinGW. Они реализованы в библиотеке только для заголовка, которая может сосуществовать с системными lib. Он также поддерживает Windows XP, который не имеет прямого аналога условных переменных.