5

リリース構成でプロジェクトをビルドすると、次の警告が表示される dll プロジェクトがあります。

MSVCRT.lib(cinitexe.obj): 警告 LNK4098: defaultlib 'msvcrtd.lib' は他のライブラリの使用と競合します。/NODEFAULTLIB:ライブラリを使用

これは単なる警告ですが、これを考慮に入れる必要があるかどうかはわかりません。

私が発見したことでは、それらは両方ともマルチスレッド ライブラリであり、通常バージョンとデバッグ バージョンです。私のdllはマルチスレッドを使用しており、デバッグできますが、boost:threadを使用しているため、デバッグまたはリリースビルドにこのWindows固有のライブラリが必要かどうかは本当にわかりません...

敬具、アレックス

さて、BuschnicK が提案したとおりに実行し、/VERBOSE:LIB リンカー フラグを使用して、デバッグ構成でこれらのライブラリにリンクしていることを発見しました。

boost_filesystem-vc100-mt-gd-1_44.lib: libboost_system-vc100-mt-gd-1_44.lib: libboost_thread-vc100-mt-gd-1_44.lib: libboost_date_time-vc100-mt-gd-1_44.lib:

主に「明示的に」指定しなかったため、リリース構成でも同じでした。したがって、リリースでこれらを次のように変更しました。

boost_filesystem-vc100-mt-1_44.lib: libboost_system-vc100-mt-1_44.lib: libboost_thread-vc100-mt-1_44.lib: libboost_date_time-vc100-mt-1_44.lib:

それはうまくいったようですが、リリース構成にも_DEBUGプリプロセッサ定義があることに気付くまで、まだ最初の警告が表示されていました。

みんな助けてくれてありがとう!!

4

2 に答える 2

10

「MSVCRT.lib」と「msvcrtd.lib」をよく読むと、問題の内容がメッセージに示されています。

2 番目のライブラリ名に「d」が追加されていることに注意してください。何が起こるかというと、Visual Studio C++ ランタイム (MSVCRT) に静的にリンクしているということです。ライブラリの 1 つがその lib のリリース バージョンをプルしており、別のライブラリがデバッグ バージョンをプルしています (したがって、接尾辞 "d")。リンカは、両方のライブラリが同じ名前の関数を定義し、競合しているため、そのうちの 1 つが自動的に削除されることを通知します。

これを修正するには、すべてのプロジェクト/ライブラリのビルド設定を確認し、すべてのビルド構成で同じランタイム ライブラリを使用していることを確認してください。project properties-> C/C++-> Code Generation- >を見てくださいRuntime Library。これはおそらく、リリース ビルドの場合は「マルチスレッド」、デバッグ ビルドの場合は「マルチスレッド デバッグ」と表示されるはずです。

一般に、これらのライブラリを静的にリンクすることは悪い習慣と見なされており、動的にリンクされた dll バージョンを優先する必要があることに注意してください。

于 2010-12-02T12:31:27.717 に答える
7

同じビルドでデバッグ ライブラリとリリース コンパイル ライブラリを実行できるようです。

プロジェクト オプションを確認し、使用するサードパーティ ライブラリのデバッグ バージョンを使用することを選択します。

于 2010-12-02T14:10:38.190 に答える