2011-10-05 10 views
5

次のコードをコンパイルする場合:エラーMacOSXのライオンにはgcc 4.6.1 C++ 0xのスレッドコードをコンパイルするとき

#include <iostream> 
#include <thread> 

using namespace std; 

void hello() 
{ 
     cout << "Hello World!" << endl; 
} 

int main() 
{ 
     cout << "starting" << endl; 
     thread t(hello); 
     t.join(); 
     cout << "ending" << endl; 
     return 0; 
} 

使用:

:私は次のエラーを取得する

$ g++-4.6.1 -std=c++0x -pthread threading.cpp 

threading.cc: In function ‘int main()’: 
threading.cc:13:2: error: ‘thread’ was not declared in this scope 
threading.cc:13:9: error: expected ‘;’ before ‘t’ 
threading.cc:14:2: error: ‘t’ was not declared in this scope 

これはMacOSX Lion上にカスタムgcc 4.6.1がインストールされています。 gcc 4.6で有効な他のすべてのC++ 0x機能は、魅力的に機能します。これはMacOSX固有のエラーですか?

+0

何が起こっているのか分かりませんが、私は決して使用しないことを知っています。代わりに、私は '-lpthread'をコンパイラオプションの末尾(!)に使用します。 – sehe

+1

これはまだ' std :: tr1'にあるかもしれません。 4.6がリリースされたとき、C++ 11は公式ではありませんでした。 –

+0

私はここで間違っているかもしれませんが、posixスレッドでリンクを深くしませんか?これはプロジェクトでは必要ありません。 – Alan

答えて

3

http://gcc.gnu.org/PR50196を参照してください - Mac OS Xは、私たちが信頼するpthreadの一部をサポートしていません。最新バージョンをビルドすることはできませんが、GCC 4.7用に修正される可能性があります。

+0

ありがとうございます。今私は追跡するバグがあります。 –

+0

Btw .. GCCで偉大な仕事をしてくれてありがとう –

+1

私はそのバグを修正した。あなたのサンプルコードはGCC 4.7で動作するはずだ。 –

4

std::thread(およびその他のC++ 11スレッドライブラリ)は、gcc 4.6.1でサポートされているプラ​​ットフォームの一部でのみ使用できます。残念ながら、MacOSXはこれらのプラットフォームの1つではありません。

私のコマーシャルJust::Threadライブラリは、gcc 4.5の32ビットMacOSX用のC++ 11スレッド機能を提供しますが、gcc 4.6はまだサポートされていません。

+0

ありがとうございます。どのようなものがサポートされているか、どんなプラットフォームでこの種の情報を入手できますか?ソースリポジトリから最新のものをビルドするとstd :: threadが利用できると思いますか? –

関連する問題