0

スレッド化のためにブースト ライブラリをビルドする必要がありました。だから私は命令を下した

./bootstrap.sh 

boost_1_46_1 ディレクトリにあります。それで

bjam --toolset=gcc --build-type=complete --with-thread link=static stage

以下のコマンドを使用して、スレッドを含む単純なプログラムをコンパイルしようとすると、エラーが発生します。

g++ -I/home/sharatds/Downloads/boost_1_46_1 /home/sharatds/Downloads/boost_1_46_1/stage/lib/libboost_thread.a main.cpp -o ini
main.cpp:(.text+0x804): undefined reference to `boost::thread::join()'
main.cpp:(.text+0x9ec): undefined reference to `boost::thread::~thread()'

何か不足していますか?

4

1 に答える 1

1

ビルド コマンドの形式が正しくないと思います。異常な方法でアーカイブ ライブラリを明示的にリストしていますが、GCC はそれを無視または誤解していると思います。

ビルドを 2 つのステップに分けてみてください。1 つのステップで .cpp ファイルを .o にコンパイルし、次に .o を boost_thread アーカイブ ライブラリにリンクして実行可能ファイルを出力します。

g++ -I/home/sharatds/Downloads/boost_1_46_1 main.cpp -o main.o
g++ main -o ini -L/home/sharatds/Downloads/boost_1_46_1/stage/lib/ -lboost_thread

上記の最初の行は、main.cpp をオブジェクト ファイルにコンパイルします。2 行目は、オブジェクト ファイルを boost_thread ライブラリにリンクします。-L 引数は -I 引数とほぼ同じように機能しますが、インクルード ファイルではなく、ライブラリの検索パスを提供します。

また、 -I に対するあなたの議論は実際にはそうあるべきだと思います

-I/home/sharatds/Downloads/boost_1_46_1/stage/include

ソースツリー自体からではなく、ビルド結果からヘッダーを含めるようにします。しかし、それを推測するだけです。

于 2011-07-08T21:51:21.210 に答える