新手:确定库使用的 CRT 库

Posted

技术标签:

【中文标题】新手:确定库使用的 CRT 库【英文标题】:newbie: Determinate CRT lib used by library 【发布时间】:2009-12-24 08:16:15 【问题描述】:

我正在使用 VC++ 6 开发应用程序。

我有一个第 3 方 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 冲突。

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

更新: 第 3 方库是静态的,而不是我之前认为的动态。 该库是编译/MD。 Dependency Walker 使用 DLL 而不是哪个 Lib。

【问题讨论】:

【参考方案1】:

如果你不知道这个工具,有依赖 Walker。 http://dependencywalker.com/

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

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

希望对你的问题有所帮助。

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

【讨论】:

以上是关于新手:确定库使用的 CRT 库的主要内容,如果未能解决你的问题,请参考以下文章

使用Kettle工具进行增量数据同步

如何从密钥库中导出 .key 和 .crt

Python库的使用

Linux 静态库和共享(动态)库的创建与使用详解

linux动静态库

linux动静态库