0

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

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

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

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

现在他们抱怨说他们得到了

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

他们陈述如下:

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

他们还说:

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

我不确定是什么导致了这个问题。这对我来说不是问题,但在那里。我在想他们可能在使用不正确的选项或错误的 CRT 版本时遇到问题?

另外,我不确定我能否满足他们可能不与 msvcrt.lib(MSVCR90.dll) 链接的要求,因为我的静态库确实依赖于标准 c 函数等。

我现在很迷茫,我确实研究了几个链接 如何分发 C 运行时 (CRT) 库

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

但是如果链接中说明了 CRT 的问题,那么我不确定如何弄清楚我在 vs2008 中使用的静态库是什么 CRT。我已经使用 /verbose 来查看它,但它不起作用。而且我知道dumpbin 或dependency walker 不会将它用于静态库。

这几天一直在为此苦苦挣扎,并且疯狂地研究。没有关于为什么他们可能会遇到 msvcrt.lib(MSVCR90.dll) 问题的答案。

4

1 回答 1

0

从错误消息中获取冲突库的名称。将这些库的名称添加到您的静态库的项目设置中(我相信在链接器设置中)。应该有一行“忽略库”,这是您应该添加库名称的地方。确保您的项目编译并且您的测试通过。然后把你新编译的静态库发给他们,看看他们是否还有冲突。如果有,请获取冲突库的名称并重复该过程。

这里描述了这个和类似的修复:http: //support.microsoft.com/kb/148652

您可以尝试将 MFC 支持添加到您的项目中,以尝试在您的开发环境中本地公开冲突;我敢打赌,这会导致您遇到与他们相同的错误。当 C 运行时和 MFC 库链接乱序时会发生这种情况。

于 2012-09-12T03:09:51.993 回答