質問

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のソースコードを持っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top