14

Boostライブラリを使用して、Linux、Eclipse CDT、g ++で作業しています。Boostスレッドを使用する既存のプログラムがあり、動的ではなく静的にリンクしようとします。/usr/local/lib ディレクトリには、次のファイルが含まれています。

libbost_thread.a
libbost_thread.so
libbost_thread.1.41.0

動的リンクは次のように機能します。

g++  -o"MyProgram"  ./main.o   -lboost_thread

静的リンク:

g++ -static -o"MyProgram"  ./main.o   -lboost_thread

次のような膨大な数のメッセージが生成されます。

「pthread_mutex_init」への未定義の参照

Boost ライブラリに静的にリンクするにはどうすればよいですか?

4

3 に答える 3

25

pthread_mutex_init の場合、-pthread オプションを使用してコンパイル/リンクします。

g++ -static -pthread -o"MyProgram"  ./main.o   -lboost_thread

問題は、pthread_mutex_init のような関数が別のライブラリにあることです。動的ライブラリには、別のライブラリが必要であるという事実のメタデータを含めることができます (したがって、libboost_thread.so には、libpthread が必要であるという事実が含まれます)。

しかし、静的ライブラリにはその情報がありません。そのため、静的にリンクするときに必要なライブラリへの参照を提供する必要があります。

-pthreadの代わりにを使用する-lpthread場合は、必要なライブラリをリンクするだけでなく、使用する必要があるその他のオプション (-D_REENTRANTコンパイラなど) を提供するため、やや推奨されます。

于 2010-02-27T17:12:44.063 に答える
2

-lpthread呼び出しに追加してみてください。

于 2010-02-27T17:12:13.260 に答える
2

Linux では、動的ライブラリは他の動的ライブラリに自動的に依存する場合があるため、リンクすると他のライブラリが無料で取得されます。静的にリンクする場合、そのようなシステムはなく、他のライブラリを手動で指定する必要があります。

于 2010-02-27T17:18:21.857 に答える