c++ - 如何找到此链接器错误的原因?

标签 c++ visual-c++ msvcrt libcmtd

在经历了漫长的重命名项目的过程后,我的 DLL 项目将无法在 Debug模式下构建(发布构建工作):

MSVCRTD.lib(msvcr90d.dll) : error LNK2005: _CrtDbgReportW already defined in LIBCMTD.lib(dbgrpt.obj)

此项目及其依赖的五个静态库设置为使用“多线程调试 (/MTd)”(在 C/C++|代码生成|运行时库下)。我相信 LIBCMTD.lib 是用于多线程调试的库,但是 MSVCRTD.lib 是什么,以及可能导致此错误的原因是什么?

如果有区别的话,这个 DLL 适用于 Windows CE。

最佳答案

LIBCMT 是/MT 所需的,MSVCRT 是/MD 所需的。您正在链接混合的 .obj 和 .lib 文件,其中一些是使用/MT 编译的,有些是使用/MD 编译的。这可不好。

通常是 .lib 文件导致了问题。检查它们的build设置并确保它们的/M 选项与您的 DLL 项目相同。

此外,请注意如果 DLL 是使用/MT 编译的,可能会遇到麻烦。当 DLL 返回指向客户端需要释放的对象的指针时,您将遇到重大问题。它不能,它不使用相同的内存分配器。

关于c++ - 如何找到此链接器错误的原因?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2088455/

相关文章:

c++ - 如何在 MSVC 中使用使用 MingW 编译的库?

visual-c++ - 使用 Microsoft 的 Visual C++ 编译器时,gcc 是否有等效于 -pedantic 的内容?

c++ - 从 VC++ 应用程序使用 VSTO 插件触发删除 Outlook 电子邮件附件

使用VC2010编译Python扩展

c++ - 由于已经定义而导致的链接器错误

c++ - 异常如何在 C++ 中工作(在幕后)

c# - for中的多个语句

c++ - 用于保存对象的二维数组的变量

c++ - 这是在 C++ 中保护字符串的安全方法吗?