2014-01-19 5 views
12

Я пытаюсь кросс-компиляции для Windows, простое приложение:MinGW ошибка: «нить» не является членом «Std»

#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, и здесь я застрял.

+4

Если вы скомпилируете это на окнах, вам понадобятся Mingw-Builds v4.8.1 с posix-threads: http://sourceforge.net/projects/mingwbuilds/files/host-windows/releases/4.8.1/64 -bit/threads-posix/sjlj/Вы можете выбирать между sjlj и seh. Seh - только x64, а sjlj - как x32, так и x64. – Brandon

+0

@CantChooseUsernames Я компилирую его на Ubuntu. У меня есть последний mingw из репозитория; _ "i686-w64-mingw32-g ++ --version" _ говорит _ "i686-w64-mingw32-g ++ (GCC) 4.6.3" _ –

+0

@CantChooseUsernames, хотя, если я не нашел решение, я мог бы использовать его как какой-то обходной путь: запустите MinGW через вино, чтобы скомпилировать источник. Хотя это странно: D Кстати, моя версия компилятора не поддерживает _std :: thread_? –

ответ

13

Эта ошибка означает, что STL, который вы используете, не содержит всех функций C++ 11.

Чтобы получить доступ к потокам C++ 11 в Windows, вам понадобится сборка Mingw с posix-threads. Здесь вы можете найти Mingw-Строит v4.8.1: http://sourceforge.net/projects/mingwbuilds/files/host-windows/releases/4.8.1/64-bit/threads-posix/sjlj/

15

Существует уже лучший вариант: https://github.com/meganz/mingw-std-threads Это легкий win32 родной реализации наиболее часто используемых многопоточности и синхронизации C++ 11 классов для MinGW. Они реализованы в библиотеке только для заголовка, которая может сосуществовать с системными lib. Он также поддерживает Windows XP, который не имеет прямого аналога условных переменных.

Смежные вопросы