2011-01-08 9 views
3

私はこの問題を抱えている人々の他の例を見つけましたが、解決策はありませんでした。ブーストスレッドとバインドも使用する静的ライブラリでstd :: coutを使用しようとしています。私が使用していないときにstd::coutがコンパイルされ、メインプログラムとうまくリンクしていますが、私がライブラリをコンパイルするときに問題はありませんが、静的ライブラリを使用するメインプログラムをコンパイルしてリンクすると、以下のような:静的ライブラリのstd :: coutとMSVC 2010リンカーエラー2005

 
2>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xi_z already defined in MSVCRTD.lib(cinitexe.obj) 
2>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_a already defined in MSVCRTD.lib(cinitexe.obj) 
2>LIBCMT.lib(crt0init.obj) : error LNK2005: ___xc_z already defined in MSVCRTD.lib(cinitexe.obj) 
2>LIBCMT.lib(mlock.obj) : error LNK2005: __unlock already defined in MSVCRTD.lib(MSVCR100D.dll) 
2>LIBCMT.lib(mlock.obj) : error LNK2005: __lock already defined in MSVCRTD.lib(MSVCR100D.dll) 
2>LIBCMT.lib(winxfltr.obj) : error LNK2005: __XcptFilter already defined in MSVCRTD.lib(MSVCR100D.dll) 
2>LIBCMT.lib(crt0.obj) : error LNK2005: _mainCRTStartup already defined in MSVCRTD.lib(crtexe.obj) 

等...

私は私のリンカの設定に行くとエラー出力にリストされている競合ライブラリを使用してからそれを停止しようとしているが、私はそれが権利を取得することはできません。 1つのライブラリを使用するのを止めると言うと、問題は解決するかもしれませんが、いくつかの行方不明の外部シンボルを与えて、問題のライブラリを切り替えますが、まだ定義済みのライブラリが残ります。私はこれを解決するために何ができるのかの手がかりを?私は別のクラス "ログ"または何かを作成し、メインの.exeからアクセスするだけです(これは問題を再現する可能性がありますが、まだ試していません)。何か助けてくれてありがとう。

+0

とにかくあなたは何をしようとしていますか? – chrisaycock

+0

私は、新しいスレッドをブーストで作成して、GUIの作成の進捗状況と、簡単なデバッグ方法や問題がある場合にはそれを使用したいと思っています。 – contrapsych

+0

質問を編集して 'cout'文をリストできますか? – chrisaycock

答えて

9

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

+0

IT WORKS !!ありがとう、1つはデバッグされ、もう1つはデバッグされませんでした。 – contrapsych

3

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

ブーストが1つの可能性があります。リンカの[追加の依存関係]設定を確認します。 IIRCの場合、.libは名前にmtまたはmdを持ちます。

2

LNK2005は、2つのコンパイルオブジェクトに同じシンボルが含まれている場合に発生します。それらを一緒にリンクしようとすると、リンカはすべての重複を持っているため、エラーをどのように扱うのか分かりません。

具体的には静的なlib/maybe boostのように聞こえるかもしれませんが、/MTでコンパイルされており、MSVCランタイムを静的にリンクしています。デフォルトのオプション(/MDMSVCR100.DLLへの動的リンク、MSVCP100.DLL)を使用してコードをコンパイルしようとしているようです。

あなたが再構築するかhttp://msdn.microsoft.com/en-us/library/2kzt1wy3.aspx

を参照してください、それがダイナミックライブラリにリンクされる静的ライブラリが確実に言った、またはあなたのコードを静的にリンクしてみてください。

最後にDはデバッグを意味すると付け加えます。すなわち、MSVCP100D.DLLは、MSVCP100.DLLのデバッグバージョンです。

関連する問題