我正在尝试使用MSVC 2013的2005时代库,但我在发布模式下得到了未解决的外部错误

时间:2014-01-28 23:16:25

标签: c++ visual-studio linker unresolved-external

设置: 我已经在VS 2013中使用DirectX SDK 2010成功编译了设计用于DirectX SDK 2007和VS 2008的DarkGDK库。我用一个自定义虚拟库替换了其中一个组件库来解决DirectX冲突。我能够成功编译所有这些组件库。

问题: 当我编译在Release模式下使用DarkGDK库的项目时,一切都按预期工作。我收到一个消息框抱怨二进制文件没有调试信息,但我的程序运行。但是,在调试模式下,我收到了一些错误。下面找到一个我认为很好的样本:

1>convmdl.lib(ConvMDL.obj) : error LNK2019: unresolved external symbol __CrtDbgReportW referenced in function "void __cdecl QuaternionSlerp(float const * const,float * const,float,float * const)" (?QuaternionSlerp@@YAXQBMQAMM1@Z)
1>libcpmtd.lib(stdthrow.obj) : error LNK2001: unresolved external symbol __CrtDbgReportW
1>system.lib(CSystemC.obj) : error LNK2001: unresolved external symbol __CrtDbgReportW
1>system.lib(dxdiaginfo.obj) : error LNK2001: unresolved external symbol __CrtDbgReportW
1>convx.lib(ConvX.obj) : error LNK2001: unresolved external symbol __CrtDbgReportW
1>convmd3.lib(ConvMD3.obj) : error LNK2001: unresolved external symbol __CrtDbgReportW
1>basic3D.lib(CBSPTree.obj) : error LNK2001: unresolved external symbol __CrtDbgReportW
1>basic3D.lib(CCompiler.obj) : error LNK2001: unresolved external symbol __CrtDbgReportW
1>basic3D.lib(ProcessHSR.obj) : error LNK2001: unresolved external symbol __CrtDbgReportW
1>world.lib(Patch.obj) : error LNK2001: unresolved external symbol __CrtDbgReportW
1>basic3D.lib(Universe.obj) : error LNK2001: unresolved external symbol __CrtDbgReportW
1>basic3D.lib(cLightMaps.obj) : error LNK2001: unresolved external symbol __CrtDbgReportW
1>basic3D.lib(CSG.obj) : error LNK2001: unresolved external symbol __CrtDbgReportW
1>basic3D.lib(NVMeshMenderD3DX.obj) : error LNK2001: unresolved external symbol __CrtDbgReportW
1>image.lib(CImageC.obj) : error LNK2001: unresolved external symbol __CrtDbgReportW
1>animation.lib(CAnimation.obj) : error LNK2001: unresolved external symbol __CrtDbgReportW
1>basic3D.lib(DBOFormat.obj) : error LNK2001: unresolved external symbol __CrtDbgReportW
1>basic3D.lib(CObjectManagerC.obj) : error LNK2001: unresolved external symbol __CrtDbgReportW
1>core.lib(RenderList.obj) : error LNK2001: unresolved external symbol __CrtDbgReportW
1>display.lib(CGfxC.obj) : error LNK2001: unresolved external symbol __CrtDbgReportW
1>file.lib(CFileC.obj) : error LNK2001: unresolved external symbol __CrtDbgReportW
1>sprites.lib(CSpriteManagerC.obj) : error LNK2001: unresolved external symbol __CrtDbgReportW
1>Debug\Weapon Creator 2 - Project Golden Girl.exe : fatal error LNK1120: 1 unresolved externals

我几天来一直在搜索这个问题。我已经检查了属于DarkGDK库的所有项目设置和我自己的项目设置。在Debug配置中,它们都使用“多线程调试(/ MTd)”。

TL; DR 尝试在使用DarkGDK库的 Debug 配置中编译项目时,我收到上述错误。所有项目都具有相同的Windows库和C运行时设置。

谢谢!

编辑:更改错误以反映Dauphic的贡献。

1 个答案:

答案 0 :(得分:1)

您正在混合调试和发布运行时。

__CrtDbgReportW仅存在于调试运行时中。如果它没有得到解决,则意味着您可能正在使用发布运行时进行编译,但您的某个库正在使用调试运行时。您必须重新编译其中一个,因此它们都使用相同的版本。

您可以在Project Properties -> C/C++ -> Code Generation -> Runtime Library

找到运行时属性

对于未解析的ATL符号,我认为您需要链接atls.lib