0

Boostのスレッドライブラリを使用していますが、VisualStudioでリンクの問題が発生しました。

現在、VSプロジェクトを/MTでコンパイルしています。リンクしているライブラリはlibboost_thread-vc100-mt-1_48.libと呼ばれ、これも/MTを使用してコンパイルされていることを示しているようです。

ただし、リンカー設定ですべての/ MD関連ライブラリをオフにすると([プロパティ]->[リンカー]->[入力]->[特定のデフォルトライブラリを無視])...

msvcrt.lib 
msvcrtd.lib 
msvcprt.lib 
msvcprtd.lib

次に、リンカーエラーが発生します。

libboost_thread-vc100-mt-1_48.lib(thread.obj) : error LNK2001: unresolved external symbol __imp___gmtime64
libboost_thread-vc100-mt-1_48.lib(thread.obj) : error LNK2001: unresolved external symbol __imp___beginthreadex

/ MD関連のライブラリをオフにするだけで、これはどのように可能でしょうか?boost :: threadは、/ MT内のライブラリに対してのみリンクする必要があります(これはLIBCMT.LIB、LIBCPMT.LIBである必要があります)。Boostを正しくコンパイルしませんでしたか?

4

1 に答える 1

2

バム!リンカーを倒した!

私の勘は正しかったようです。Boostを正しくコンパイルしませんでした。ブーストビルドで/MTをエミュレートするには、静的ランタイムライブラリに対してリンクする必要があります(動的ランタイムライブラリへのリンクがデフォルトのようです)。

これを行うためのコマンド(boost :: threadのリリースビルドの場合)は次のとおりです。

.\b2 --with-thread variant=release link=static threading=multi runtime-link=static

これが、プロジェクトで/MTをオンにしてブーストを使用している誰かに役立つことを願っています!

于 2012-01-27T22:40:42.917 に答える