Monthly Archives: 12月 2021

无法解析的外部符号 __CrtDbgReport

经常在链接是报link2001错误,其中一般是函数体没有定义错误。但是排除以上简单的外,还有一种如下无法解析系统文件中的函数定义。如下:
LINK : warning LNK4098: 默认库“LIBCMT”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
libcpmtd.lib(cerr.obj) : error LNK2001: 无法解析的外部符号 __CrtDbgReportW
libcpmtd.lib(stdthrow.obj) : error LNK2001: 无法解析的外部符号 __CrtDbgReportW
。。。。。。
libcpmtd.lib(_tolower.obj) : error LNK2019: 无法解析的外部符号 __calloc_dbg,该符号在函数 __Getctype 中被引用
像这种情况,可以推测运用了错误的运行库包。
在一程序中使用不同类型的运行时库或使用调试和非调试版本的运行时库,则将收到此链接错误。
例如,编译一个文件以使用一种运行时库,而编译另一个文件以使用另一种运行时库(例如单线程运行时库对多线程运行时库),试图链接它们,则将得到此警告。应将所有源文件编译为使用同一运行时库。
其实就是调正编译器选项参数:/MD、/MT 和 /LD
在vc8中,在“配置属性–>C/C++–>代码生成–>运行时库”中将“多线程(/MT)”统一改为“多线程调试(/MTd)”即可。

VisualStudio 2019 编译Winxp可用的程序

# 本文作者: coneco @Coneco’s diary
# 本文链接: https://conecoy.cn/Technology/Development/VS-MSVC多个版本时的正确使用与问题解决/
# 版权声明: 本站所有文章除特别声明外,均采用 (CC)BY-NC-SA 许可协议。转载请注明出处!

本文产生的原因
最近在用 VS 2019 来编译兼容 WinXP 的程序时,发现高版本 (14.29.xxxxx) 的 MSVC 的 runtime 代码部分不兼容 winXP。之后使用低版本(14.25.xxxxx)的 MSVC 就可以运行在 winXP 上,所以本文的目的是记录整个问题的解决工程,方便其他朋友参考。

Continue reading