2009-06-04 10 views
4

私は次の形式のリンカエラー持つ保つ:Visual Studio(LNK2005)でこのリンクエラーを解決するにはどうすればよいですか?

と私はしないでください...定義されすでに :

libcmtd.dll msvmrtd.dll いくつかの要素(_mkdir EXを)それらを解決する方法を知っている。プライベート

:ここ

は、完全なエラーメッセージです__thiscall TYPE_INFO :: TYPE_INFO(TYPE_INFOクラスのconst &)すでに LIBCMTDで定義された」 (?? 0type_info @@ AAE @ ABV0 @@ Z) .LIB(typinfo.obj)

MSVCRTD.LIB(ti_inst.obj):エラーLNK2005: "プライベート:TYPE_INFO ::演算子=(constの& TYPE_INFOクラス)& __thiscall TYPE_INFOクラス"(?? 4type_info @@ AAEAAV0 @ ABV0 @@ Z)は、すでに で定義されています。LI BCMTD.lib(typinfo.obj)

この問題を解決するのに役立ちますか?

+0

'type_info'クラスと全く同じリンカ問題があります。私はMultithreaded-Debug-DLLからMultithreaded-Debugに変更しました。それ以前はすべてが機能していました。しかし、私のプログラムが別のコンピュータで動作するためには、マルチスレッド - デバッグが必要です。あなたは解決策に来ましたか? –

答えて

4

あなたの問題は、あなたが同じシンボルを提供する二つのファイルとリンクしていることです。

我々は問題がある正確に何を伝えることはできませんが、あなたは、Visual Studioの2つの異なるバージョンのライブラリとリンクしていることになりそうですので、あなたは本当のエラーメッセージを提供していません。

ウェブを検索することで解決できる解決策もあります(私はこれをしたが問題の記事を見逃してしまった:-)、プロジェクトオプションを"Multi-threaded Debug(/MTd)"から"Multi-threaded Debug DLL (/MTD)"に変更して問題を解決できることを示唆しているが、これを見た。

我々はよりターゲットを絞った支援を提供できるように、完全なエラーを投稿してください。

+0

http://stackoverflow.com/questions/935161/visual-c-runtime-library-linker-woes plzzzzこのリンクを一度確認してください。 – Cute

8

いくつかのことを確認します。

  1. は、あなたのヘッダファイルが守られています。私。彼らは#ifndefのガードを持っていますか?

  2. あなたはinlineキーワードを指定せずに、ヘッダーに(非テンプレート)関数を定義しています。それはたくさんのものを混乱させる。

  3. あなたは.cppファイルにテンプレートを定義しようとしています。すべてのテンプレート定義はヘッダーにある必要があります。

いくつかのコードと正確なエラーテキストを投稿してください。

+1

+1:C++とlnk2005のエラーを使って数日間私を困惑させたとき、修正は '#ifndef'ガードでした。 –

+2

第2回のための乾杯:) – Deamonpog

1

LNK4098にあるMSDNの記事は、使用しているCRTに応じて、 "ライブラリを無視する"リストに手動で追加するライブラリを示しています。あなたはCRT選択する必要があります(マルチスレッドかどうかを、スタティックまたはDLL、デバッグまたはリリース)、その後、あなたの選択に基づいて無視するライブラリを追加します。

根本的な原因は、こののKB154753 ... libraries that a program will link with when built by using Visual C++

私の解釈では、より詳細に記載されているが、特定の状況で自動的にそのCRTライブラリを選ぶアルゴリズムは、あなたのコードをリンクするために、いくつかの矛盾のライブラリを選ぶということです。

2

ランタイムライブラリリンクを選択するオプションが、すべてのプロジェクトとライブラリで同じであることを確認してください。 プロジェクトプロパティ - >設定プロパティ - > C/C++ - >コード生成 - >ランタイムライブラリ - > "マルチスレッド"/"マルチスレッドDLL"/...

問題はすべて私のC++プロジェクト"マルチスレッド"でしたが、 "マルチスレッドDLL"であるFortranモジュールを参照していました。

関連する問題