2013-05-11 2 views
0

Я пытаюсь собрать следующую программу на 64-битной Windows 7 машине с установленным Cygwin и ССАГПЗ компилятор обновлен до 4.7.3:gcc 4.7.3 на cygwin поддерживает функции параллелизма C++ 11?

#include <vector> 
#include <thread> 
#include <mutex> 

using namespace std; 

std::mutex flemutex; 
std::mutex arrmutex; 

main() { 

thread t; 
} 

На компиляции с помощью следующей команды:

gcc -std=c++11 -o file.o -c file.cpp 

я получаю следующие ошибки:

file.cpp:12:1: error: ‘mutex’ in namespace ‘std’ does not name a type 
file.cpp:13:1: error: ‘mutex’ in namespace ‘std’ does not name a type 
file.cpp: In function ‘int main()’: 
file.cpp:39:3: error: ‘thread’ is not a member of ‘std’ 
file.cpp:39:15: error: expected ‘;’ before ‘t’ 

кто-нибудь знает, что происходит?

Спасибо!

+0

(1) Вы пытались добавить '-lpthread' в командную строку gcc? (2) Вы можете скачать MinGW, который не нужен cygwin и работает с потоками «из окна» – borisbn

+0

Я попытался добавить -lpthread в командную строку, и это не сработало. Во всяком случае, я просто компилирую здесь, а не ссылку, так что это не должно иметь никакого эффекта, правильно? Кроме того, я надеюсь, что это работает на cygwin и не нужно устанавливать MinGW на мою машину. Могут ли сосуществовать мирно на одной машине? – user2358643

+0

Простой - обновление cygwin и gcc. – ikh

ответ

1

Вы можете попробовать следующее:

#include <thread> 
#include <iostream> 

using std::cout; 
using std::endl; 

main() { 
#ifndef(_GLIBCXX_HAS_GTHREADS) 
    cout << "GThreads are not supported..." << endl; 
#endif 
} 

В самом деле, из GCC 4.4, _GLIBCXX_HAS_GTHREADS не определен, когда libstdc++ построен, потому что реализация Cygwin из pthread не хватает некоторых функциональных возможностей. То же самое можно сказать и о MinGW.

ПРИМЕЧАНИЕ: GThreads, который непосредственно используется std::thread, является оберткой GCC вокруг потоков POSIX.

Есть builds of MinGW-w64 на основе GCC 4.7 и 4.8 таргетирования как 64-разрядные и 32-разрядные, которые предлагают экспериментальную поддержку std::thread. Более того, да, конечно, Cygwin и MinGW могут сосуществовать до тех пор, пока вы переключаетесь между этими двумя средами правильно, т. Е. не смешайте их в переменной окружения PATH.

Соответствующие ссылки:

+0

Спасибо! Это было очень полезно. – user2358643

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