1

eclipse kepler/mingw 4.8.1 および win32 で std::thread を使用する単純な C++ プログラムをコンパイルしようとしています。Windows 開発に長年携わった後、ある時点で開発を Linux に移行したいと考えています。

#include "test.h"
#include <thread>
#include <algorithm>


int main()
{
    Test::CreateInstance();

    std::thread(
        [&]()
        {
            Test::I()->Output2();
        }
    );

    Test::DestroyInstance();
    return 0;
}

テストの目的を無視します (これは、std::thread が機能するようになったら、拡張する出力を生成するだけのシングルトンです!)

Eclipse で設定した g++ コンパイラの設定は次のとおりです。

-c -fmessage-length=0  -std=c++0x -Wc++0x-compat

そして、私が定義したプリプロセッサ シンボルは次のとおりです。

__GXX_EXPERIMENTAL_CXX0X__

ビルドは、std::thread が std のメンバーではないことを訴えます。

    10:30:13 **** Incremental Build of configuration Debug for project test ****
Info: Internal Builder is used for build
g++ -D__GXX_EXPERIMENTAL_CXX0X__ -O0 -g3 -Wall -c -fmessage-length=0 -std=c++0x -Wc++0x-compat -o main.o "..\\main.cpp" 
..\main.cpp: In function 'int main()':
..\main.cpp:11:2: error: 'thread' is not a member of 'std'
  std::thread(
  ^

このコンパイルを正しく行うために欠けている可能性があるものを誰かが提案できますか?

4

3 に答える 3

0

代わりにCygwinコンパイラを使用しましたが、同じ問題がありました。私がしたことは、プリプロセッサ__cplusplusの値でシンボルを定義することでした。また、コンパイラ201103Lのフラグを使用していました。-std=c++11この設定は、すべての構成 (デバッグおよびリリース) に対して行う必要があります。

もう 1 つ確認できることは、コンパイラが正しくインストールされていることです。ruvenvb の説明に従って、コンパイラのインストールを確認してください。

于 2014-09-25T17:25:45.630 に答える
0

MinGW の C++11 バージョンに追加できるネイティブ実装については、こちらを参照してください: https://github.com/meganz/mingw-std-threads これはヘッダーのみのライブラリなので、プロジェクトにヘッダーを追加すると、C++11 スレッドと同期プリミティブが得られます。

于 2014-12-11T11:25:50.507 に答える