1

この非常に些細な質問をしたいだけです。これが正しい質問なのか、以前に尋ねられたのかわかりませんが、boost のドキュメントにアクセスするだけで解決できることはわかっています。しかし、私は本当に迷子になり、 での構成boost.threadに行き詰まっていますC::B

私はこれに関しては初心者であり、現在、学習目的のためだけに、真剣にではなく、Windows アプリの作成方法を学んでいます。マルチスレッドを機能させるためだけに、マルチスレッドの概念が本当に必要であることに気づきました。そこで、Boost ライブラリを使用することにしました。Boost wiki がライブラリの構築について述べていることを正確に実行しました。何か間違ったことはしていないと思います。

ヘッダーのみのドキュメントからいくつかのコードを実行しましたが、問題なく動作しますが、ブーストに含まれるライブラリがあり、何らかの特別な処理が必要であり、boost.threadこれには問題があります。ファイルに#include-ingしてもうまくいかないことはわかっていますBoost.threadオンラインチュートリアルから見つけたこの基本的なコードからエラーが発生しました(そこで見つけたマルチスレッドページの最初のコード)は、そのようなファイルディレクトリがないというエラーを生成します。

||=== Multithreading_sample, Debug ===|
C:\Documents and Settings\Owner\Desktop\Programming\C++\Dev          
C++\App\Multithreading_sample\Multithreading_sample\main.cpp|1|boost/thread.hpp: No such 
file or directory|
C:\Documents and Settings\Owner\Desktop\Programming\C++\Dev    
C++\App\Multithreading_sample\Multithreading_sample\main.cpp||In function `void   
wait(int)':|
C:\Documents and Settings\Owner\Desktop\Programming\C++\Dev  
C++\App\Multithreading_sample\Multithreading_sample\main.cpp|6|error: `boost' has not   
been declared|
C:\Documents and Settings\Owner\Desktop\Programming\C++\Dev 
C++\App\Multithreading_sample\Multithreading_sample\main.cpp|6|error: `boost' has not 
been declared|
C:\Documents and Settings\Owner\Desktop\Programming\C++\Dev    
C++\App\Multithreading_sample\Multithreading_sample\main.cpp|6|error: `seconds' cannot 
be used as a function|
C:\Documents and Settings\Owner\Desktop\Programming\C++\Dev   
C++\App\Multithreading_sample\Multithreading_sample\main.cpp|6|error: `sleep' undeclared 
(first use this function)|
C:\Documents and Settings\Owner\Desktop\Programming\C++\Dev 
C++\App\Multithreading_sample\Multithreading_sample\main.cpp|6|error: (Each undeclared 
identifier is reported only once for each function it appears in.)|
C:\Documents and Settings\Owner\Desktop\Programming\C++\Dev   
C++\App\Multithreading_sample\Multithreading_sample\main.cpp||In function `int main()':|
C:\Documents and Settings\Owner\Desktop\Programming\C++\Dev  
C++\App\Multithreading_sample\Multithreading_sample\main.cpp|20|error: `boost' has not 
been declared|
C:\Documents and Settings\Owner\Desktop\Programming\C++\Dev   
C++\App\Multithreading_sample\Multithreading_sample\main.cpp|20|error: expected `;' 
before "t"|
C:\Documents and Settings\Owner\Desktop\Programming\C++\Dev   
C++\App\Multithreading_sample\Multithreading_sample\main.cpp|20|warning: statement is a   
reference, not call, to function `thread'|
C:\Documents and Settings\Owner\Desktop\Programming\C++\Dev   
C++\App\Multithreading_sample\Multithreading_sample\main.cpp|20|warning: statement has 
no effect|
C:\Documents and Settings\Owner\Desktop\Programming\C++\Dev   
C++\App\Multithreading_sample\Multithreading_sample\main.cpp|21|error: `t' undeclared 
(first use this function)|
||=== Build finished: 9 errors, 2 warnings ===|

そして、それが私のboost.threadライブラリを検出しないことを知っているため、この部分のどこに行くべきかわかりません。Google を検索しましたが、ここに示すように 1boost.thread1 を個別にビルドするのが最善の策だと思います。次に何をすべきかわかりません。

  • 私のブースト ライブラリのバージョンは 1.51.0 で、C::B は Windows XP で実行されている 10.05 で、CodeBlocks で使用したいと考えてboost.threadいます。私がやりたかったのは、コードを貼り付けて実行し、それがどのように機能するかを確認することだけでした.
  • 私のMinGWバージョンは3.4.2です
4

1 に答える 1

1

最後に、何日にもわたってウェブ上で多数のソリューションの調査とグーグル検索と相互参照を行った後、提供したサイトで最初のコードを作成しました。

最初に行ったことは、extract_directory をグローバル変数の組み込みフィールドの下のベースとして含めたことです。次に、プロジェクト オプションに移動し、階層内のプロジェクトの名前をクリックしてディレクトリを検索し、コンパイラ タブに $(#boost.include) を追加し、リンカー タブに $(boost)\stage\lib を追加しました。

ブーストの再構築(特にboost.threadライブラリの構築)を最初からやり直し、ドキュメントに正確に書かれていることをもう一度たどると、最終的にブースト::システムで未定義の参照エラーを示すエラーが発生しました。この問題を解決するために私がしたことは、自分のプロジェクトをその boost.system (私の場合は stage\lib フォルダー内のファイル) にリンクすることです。

このライブラリをプロジェクト libboost_system-mgw34-mt-1_51.a にリンクします

プログラムをコンパイルすると、boost::chrono への未定義の参照を示すエラーが発生しました。ライブラリ名は次のとおりです。

libboost_chrono-mgw34-mt-1_51.a

また、boost::system で行ったのと同じ方法で、自分のプロジェクトをそれに対してリンクします。

そしてコンパイル!この経験から学んだことは、何の警告もなく、必要なライブラリを探す必要があるということです。これまでのところ、boost.thread ライブラリとエラーをリンクするだけで、boost.system への未定義の参照エラーを言い続けるだけです。私が認識していないのは、ブーストスレッドまたは他のライブラリと関係があります(これは、私が混乱する前に遭遇した最初のエラーです)。別のライブラリにある各boostライブラリ内に複数の関数呼び出しがあると思うので、そのような呼び出しを必要とするそれらともリンクする必要があります。

親切な回答をありがとうございました。

于 2012-09-19T06:13:14.990 に答える