3

私はこの問題を抱えている人々の他の例を見つけましたが、彼らの解決策には運がありませんでした。ブーストスレッドとバインドも使用する静的ライブラリでstd::coutを使用しようとしています。使用せずstd::coutにメインプログラムと正常にコンパイルおよびリンクする場合でも、ライブラリをコンパイルしてコンパイルする場合は問題ありませんが、静的ライブラリを使用するメインプログラムをコンパイルしてリンクすると、次のようなものが大量に発生します。 :

2> LIBCMT.lib(crt0init.obj):エラーLNK2005:___xi_zはMSVCRTD.lib(cinitexe.obj)ですでに定義されています
2> LIBCMT.lib(crt0init.obj):エラーLNK2005:___xc_aはMSVCRTD.lib(cinitexe.obj)ですでに定義されています
2> LIBCMT.lib(crt0init.obj):エラーLNK2005:___xc_zはMSVCRTD.lib(cinitexe.obj)ですでに定義されています
2> LIBCMT.lib(mlock.obj):エラーLNK2005:__ unlockはMSVCRTD.lib(MSVCR100D.dll)で既に定義されています
2> LIBCMT.lib(mlock.obj):エラーLNK2005:__lockはMSVCRTD.lib(MSVCR100D.dll)で既に定義されています
2> LIBCMT.lib(winxfltr.obj):エラーLNK2005:__XcptFilterはMSVCRTD.lib(MSVCR100D.dll)で既に定義されています
2> LIBCMT.lib(crt0.obj):エラーLNK2005:_mainCRTStartupはMSVCRTD.lib(crtexe.obj)ですでに定義されています

等...

リンカの設定にアクセスして、エラー出力にリストされている競合するライブラリの使用を停止しようとしましたが、正しく取得できません。1つのライブラリの使用を停止するように指示すると、問題は解決する可能性がありますが、不足している外部シンボルがいくつか表示されます。問題が発生していたライブラリを切り替えますが、まだいくつかの「定義済み」が表示されます。これを修正するために私ができることの手がかりはありますか?「log」などと呼ばれる別のクラスを作成し、メインの.exeからアクセスする必要があります(文字列ライブラリを使用するため、問題が発生する可能性がありますが、まだ試していません)。助けてくれてありがとう。

4

3 に答える 3

9

->プロジェクト+プロパティ、C / C ++、コード生成、ランタイムライブラリを確認してみてください。.libとメインプロジェクトは、ここで同じ設定を使用する必要があります。

于 2011-01-08T20:55:11.003 に答える
3

プロジェクト、プロパティ、C / C ++、コード生成、ランタイムライブラリ設定を右クリックします。それがあなたの問題の原因です。設定には/MTと/MDがあります。この設定の値が競合するコードをリンクしているため、すべてを同じものでコンパイルする必要があります。

ブーストが1つである可能性があります。リンカの追加の依存関係の設定を確認してください。IIRC、.libsの名前にはmtまたはmdが含まれています。

于 2011-01-08T20:55:33.577 に答える
2

LNK2005は、2つのコンパイルオブジェクトに同じシンボルが含まれている場合に発生します。それらをリンクしようとすると、リンカはすべてが重複しているという事実をどう処理するかわからないため、エラーが発生します。

具体的には、静的ライブラリ/おそらくブーストがコンパイルされており/MT、MSVCランタイムを静的にリンクしているようです。デフォルトのオプション(、への動的リンク)を使用してコードをコンパイルしようとしているよう/MDです。MSVCR100.DLLMSVCP100.DLL

http://msdn.microsoft.com/en-us/library/2kzt1wy3.aspxを参照してください

上記の静的ライブラリを再構築して、ダイナミックライブラリに対してリンクされていることを確認するか、静的にリンクされたコードを試してください。

D最後に、デバッグを意味することを付け加えておきます。つまりMSVCP100D.DLL、のデバッグバージョンですMSVCP100.DLL

于 2011-01-08T20:55:54.827 に答える