gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 01:00:50 26 4
gpt4 key购买 nike

在经历了漫长的重命名项目的过程后,我的 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com