我正与客户共享一个静态库。 它正在使用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)的问题。
答案 0 :(得分:0)
从错误消息中获取冲突库的名称。将这些库的名称添加到静态lib的项目设置中(在我认为的链接器设置中)。应该有一行"忽略库,"这是您应该添加库名称的位置。确保您的项目编译并且您的测试通过。然后将它们发送给您新编译的静态库,看看它们是否仍有冲突。如果是,请获取冲突库的名称并重复该过程。
此处和类似的修补程序在此处描述:http://support.microsoft.com/kb/148652
您可以尝试向项目添加MFC支持,以尝试在开发环境中本地公开冲突;我打赌这会导致你得到同样的错误。它发生在C运行时和MFC库无序连接时。