初心者:ライブラリが使用する CRT ライブラリを決定する
-
21-09-2019 - |
質問
VC++6を使用してアプリケーションを開発しています。
サードパーティの DLL を持っています。このライブラリはマルチスレッド DLL (/MD) としてコンパイルされ、私のアプリケーションもコンパイルされました。しかし、リンクできません:
LINK : warning LNK4075: ignoring /EDITANDCONTINUE due to /INCREMENTAL:NO specification
msvcprtd.lib(MSVCP60D.dll) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::~basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(void)" (??1?$basic_strin
g@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@XZ) already defined in XXXApi.lib(CODbg.obj)
msvcprtd.lib(MSVCP60D.dll) : error LNK2005: "public: __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >(class std::basic_string<c
har,struct std::char_traits<char>,class std::allocator<char> > const &)" (??0?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV01@@Z) already defined in XXXApi.lib(Dictionary.obj)
../../Exes/win2k3_oracle11/XXX.exe : fatal error LNK1169: one or more multiply defined symbols found
Error executing link.exe.
から ここ 3 番目のライブラリとコードの両方が /MD としてコンパイルされているにもかかわらず、使用されている古い/新しい iostream と競合する可能性があることがわかります。
サードパーティのライブラリでどの iostream ライブラリが新旧使用されているかを確認する方法はありますか?
更新:サードパーティのライブラリは静的であり、前に考えたように動的ではありません。ライブラリは /MD でコンパイルされます。dependency Walker は、どのライブラリではなく DLL で動作します。
解決
は、依存関係ウォーカーは、あります。 http://dependencywalker.com/する
ドラッグし、メインウィンドウに自分のDLLやEXEをドロップします。これは、すべての依存関係を表示します。
そして、あなたは、サードパーティのDLLにリンクする場合は、あなたが必要とするすべては、そのDLLのために作られたの.libです。 あなたはそれに.libを持っていない場合、あなたは常にツールC pellesからLIB.EXEまたはpolib.exeを使ってものを作ることができます。 polibあなたが.defファイルを記述する必要はありませんので、使いやすいです。 http://www.smorgasbordet.com/pellesc/する
私はそれがあなたの質問のために役立ちます願っています。
編集:?あなたが使用しているの.libのソースコードを持っています。