2012-02-21 7 views
0

私のマシンにBoostをインストールしました。私はVisual Studio 2010 Ultimateで作業しています。 Boostをインストールするには、私はここに指示に従いました:http://www.boost.org/doc/libs/1_48_0/more/getting_started/windows.html。特に、次の行: "BoostPro Computingが提供するインストーラは、コンパイル済みのバイナリをダウンロードし、boostルートのlib \サブディレクトリにインストールします"。だから私は自分のマシンでboost_1_47を実行していることがわかりました。そして私はboost :: threadライブラリで遊ぶ少しのテストプログラムを始めました。しかし後押しする導入の最初のサンプルコードで、このコード::スレッドがコンパイルされません。ブーストスレッドを使用している場合は、半分しか動作しません

#include <boost/thread.hpp> 


    boost::thread make_thread(); 

    void f() 
    { 
     boost::thread some_thread = make_thread(); 
     some_thread.join(); 
    } 


    int main() 
    { 
     f(); 
     return 0; 
    } 

これはエラーメッセージです:

error LNK2019: unresolved external symbol "class boost::thread __cdecl make_thread(void)" ([email protected]@[email protected]@@XZ) referenced in function "void __cdecl f(void)" ([email protected]@YAXXZ) 

しかし、このコードはコンパイルされます。

#include <boost/thread.hpp> 

void testFunction() 
{ 

} 

int main() 
{ 
    boost::thread_group group; 
    group.create_thread(&testFunction); 
    group.join_all();  

    return 0; 
} 

上記のコードは、一部のフォーラムエントリからコピー/貼り付けられています。しかし、このすべての理由は何ですか? make_thread()はバージョン47ではサポートされていませんか?もしそうなら、なぜリンカだけがそれに不平を言うのですか?私は何が欠けていますか?

EDIT:この質問をしたため

私の謝罪、私はそれは難しい認めることを見つけるが、これはカテゴリRTFMに属します。しかし、これについては不安を感じる:以下の答えを読んでください。

答えて

3

Googleですばやく検索してthread managementに関するドキュメントを読んだところ、make_threadという関数は、スレッドがさまざまなスレッドオブジェクト間を移動できることを示す例で使用されている単なるダミー関数です。

スレッドを作成する特定の機能が必要な場合は、自分で作成する必要があります。

2

ブーストに定義されている関数はmake_threadではありません。私はこの例を誤解していると思います。このライン:

boost::thread make_thread(); 

は、「カスタム」make_thread機能の単なるプロトタイプですが、実装なし。だから、リンカーはそれを見つけることができません。

関連する問題