msvcrt.lib(MSVCR90.dll)的LNK 2005链接器问题

时间:2012-09-11 23:55:26

标签: c++ visual-studio-2008 visual-c++ linker-errors lnk2005

我正与客户共享一个静态库。 它正在使用vs2008 sp 1.

我正在使用第三方库,我使用带有共享dll和/ MD选项发布版本的mfc构建

然后我构建了自己的静态库,其中包含带有共享dll选项和/ MD发布版本的MFC的第三方库。

我创建了一个测试dll以确保它正常工作。没有问题可以运行。 我根本不使用MFC。只有客户才是这就是为什么他们告诉我将MFC用于共享dll和/ MD。

现在他们抱怨他们正在

xyz已在msvcrt.lib(MSVCR90.dll)错误中定义。这些看起来像我认为的LNK2005错误。

他们说明了以下内容:

“由于”我的库“与更大的制造工具链构建中常见的许多库静态链接,因此具体链接失败。这些常见的库函数由”我的库“导出,导致链接冲突。

此外他们说:

“为了解决这个问题,”我的库“只能公开与单个API(来自我的静态库)本身相关联的函数,以保证不会产生链接冲突。导出的函数可以在”my“时被操作library“是使用链接器选项和模块定义(.def文件)语句的组合构建的”

我不确定是什么原因造成这个问题。这不是我的问题,而是那里。 我想也许他们在使用错误的选项或错误的CRT版本时遇到问题?

另外,我不确定我是否可以遵守他们的请求,可能没有链接msvcrt.lib(MSVCR90.dll),因为我的静态lib确实依赖于标准的c函数等。

我现在很迷茫,我研究了几个链接 How to distribute C run-time (CRT) Libraries

http://www.nuonsoft.com/blog/2008/10/29/binding-to-the-most-recent-visual-studio-libraries/

但如果在链接中说明CRT的问题,那么我不知道如何弄清楚我在vs2008中使用我的静态库的CRT。我使用/ verbose来查看但它不起作用。我知道dumpbin或依赖walker不会为静态lib剪切它。

几天来一直在努力,并且像疯了一样进行了研究。没有答案为什么他们可能有msvcrt.lib(MSVCR90.dll)的问题。

1 个答案:

答案 0 :(得分:0)

从错误消息中获取冲突库的名称。将这些库的名称添加到静态lib的项目设置中(在我认为的链接器设置中)。应该有一行"忽略库,"这是您应该添加库名称的位置。确保您的项目编译并且您的测试通过。然后将它们发送给您新编译的静态库,看看它们是否仍有冲突。如果是,请获取冲突库的名称并重复该过程。

此处和类似的修补程序在此处描述:http://support.microsoft.com/kb/148652

您可以尝试向项目添加MFC支持,以尝试在开发环境中本地公开冲突;我打赌这会导致你得到同样的错误。它发生在C运行时和MFC库无序连接时。