新手:确定库使用的CRT库

时间:2009-12-24 08:16:15

标签: c++ dll visual-c++ vc6

我正在使用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.

here我看到即使第三个库和我的代码都编译为/ MD,也可能与旧的/新的iostream beining使用冲突。

有没有办法确定第三方库使用的iostream库旧/新?

UPD: 第三方lib是静态的,而不像我之前想象的那样动态。 lib编译/ MD。 Dependency Walker使用DLL而不是Libs。

1 个答案:

答案 0 :(得分:2)

如果您不了解此工具,则存在依赖性Walker。 http://dependencywalker.com/

将DLL或exe拖放到主窗口上。它将显示所有依赖项。

如果你想链接到第三方DLL,你需要的只是为该DLL制作的.lib。 如果您没有.lib,则可以使用pelles c工具中的lib.exe或polib.exe创建一个.lib。 polib更容易使用,因为您不需要编写.def文件。 http://www.smorgasbordet.com/pellesc/

我希望这对你的问题有帮助。

编辑:您是否拥有正在使用的.lib的源代码?