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

Qwe*_*tie 1 c++ msvcrt visual-c++ libcmtd

经过漫长的过程重命名项目后,我的DLL项目将不会在调试模式下构建(发布版本工作):

MSVCRTD.lib(msvcr90d.dll) : error LNK2005: _CrtDbgReportW already defined in LIBCMTD.lib(dbgrpt.obj)
Run Code Online (Sandbox Code Playgroud)

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

如果它有所不同,此DLL适用于Windows CE.

Han*_*ant 5

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

通常是导致问题的.lib文件.检查其构建设置并确保其/ M选项与DLL项目相同.

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