アプリケーションを VC6 から Visual Studio 2005 に移植しているときにエラーが発生します。
これが何を意味するのか誰にもわかりませんか?
mfcs80.lib(dllmodul.obj): エラー LNK2005: _DllMain@12 は MSVCRT.lib(dllmain.obj) で既に定義されています
アプリケーションを VC6 から Visual Studio 2005 に移植しているときにエラーが発生します。
これが何を意味するのか誰にもわかりませんか?
mfcs80.lib(dllmodul.obj): エラー LNK2005: _DllMain@12 は MSVCRT.lib(dllmain.obj) で既に定義されています
これが発生する理由はいくつかあると確信しています。私が見つけた最悪の原因は、元々 DLL であった多くの静的ライブラリ (私たちのもの) を統合しようとしたときでした (実際、プロジェクトを DLL と静的の両方としてビルドします)。ライブラリ)。
私たちの C++/CLI DLL は、これらのライブラリの静的バージョンを使用しており (C++/CLI DLL の使用時に ASP.NET のロードの問題を引き起こしていた DLL の依存関係の問題を回避するため)、最初は同じリンカー エラーが発生していました。
問題は、コードが DLL としてビルドされたときに必要であった AFX_MANAGE_STATE(AfxGetStaticModuleState()) マクロの使用であることが判明しましたが、静的ライブラリの呼び出しには実際には必要ありませんでした。
これを解決するために、各プロジェクトの stdafx.h に次のコードを追加しました。
#ifdef OMUTILITIES_LINK_STATIC
#undef AfxGetStaticModuleState
#define AfxGetStaticModuleState AfxGetModuleState
#endif
もちろん、これはあなた固有の問題ではないかもしれません。しかし、最終的には、リンカの /VERBOSE オプションをオンにして、誰が、何を、どこで、いつランタイム ライブラリをプルしていたかを確認することで、それを理解しました。(プロジェクト プロパティ/構成プロパティ/リンカ/vs2005 で進行状況を表示)
http://support.microsoft.com/default.aspx?scid=kb;en-us;q148652から
Visual C++ で CRT ライブラリと MFC ライブラリが間違った順序でリンクされていると、LNK2005 エラーが発生する
なぜなら
CRT ライブラリは、new、delete、および DllMain 関数に弱い外部リンケージを使用します。MFC ライブラリには、new、delete、および DllMain 関数も含まれています。これらの関数では、CRT ライブラリをリンクする前に MFC ライブラリをリンクする必要があります。
そう
この問題を解決するには、2 つの方法があります。最初の解決策は、リンカーにライブラリを正しい順序でリンクさせることです。2 番目の解決策では、問題の原因となっているモジュールを見つけて修正できます。
また
リンカーに正しい順序でライブラリをリンクさせる
- [プロジェクト] メニューの [設定] をクリックします。
- [プロジェクト設定] ダイアログ ボックスの [設定対象] ビューで、リンク エラーが発生しているプロジェクト構成をクリックして選択します。
- [リンク] タブで、[カテゴリ] コンボ ボックスの [入力] をクリックして選択します。
[ライブラリを無視] ボックスに、ライブラリ名 (たとえば、Nafxcwd.lib;Libcmtd.lib) を挿入します。
注: /NOD: に相当するリンカー コマンド ライン。
- [オブジェクト/ライブラリ モジュール] ボックスに、ライブラリ名を挿入します。これらが順番に、行の最初の 2 つのライブラリとしてリストされていることを確認する必要があります (たとえば、Nafxcwd.lib Libcmtd.lib)。
Visual C++ .NET でこのオプションを設定するには、オンライン ヘルプのトピック「Visual C++ プロジェクト プロパティの設定」を参照してください。
または
問題のあるモジュールを見つけて修正する 現在のライブラリ リンクの順序を表示するには、次の手順に従います。
- [プロジェクト] メニューの [設定] をクリックします。
- [プロジェクト設定] ダイアログ ボックスの [設定対象] ビューで、リンク エラーが発生しているプロジェクト構成をクリックして選択します。
- [リンク] タブで、[プロジェクト オプション] ボックスに /verbose:lib と入力します。
- プロジェクトを再構築します。ライブラリは、リンク プロセス中に出力ウィンドウに一覧表示されます。
プロジェクトのプロパティで問題のあるライブラリを無視するようにリンカー入力を設定できますが、これは機能する場合と機能しない場合があります。