我正在与客户共享一个静态库。它使用的是 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) 问题的答案。