切换到非调试运行时/ MT会导致链接错误

时间:2015-09-07 01:01:14

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

我正在尝试将我的可执行文件部署到另一台机器上,因此我需要非调试运行时。

切换到非调试运行时/ MT会导致链接错误。 / Mtd编译好。以下是许多错误的示例。

  

1> libcpmtd.lib(_tolower.obj):错误LNK2001:未解析的外部符号_calloc_dbg   1> libcpmtd.lib(locale.obj):错误LNK2001:未解析的外部符号_calloc_dbg   1> libcpmtd.lib(wlocale.obj):错误LNK2001:未解析的外部符号_calloc_dbg   1> libcpmtd.lib(StlCompareStringA.obj):错误LNK2001:未解析的外部符号_free_dbg   1> libcpmtd.lib(locale.obj):错误LNK2001:未解析的外部符号_free_dbg   1> libcpmtd.lib(wlocale.obj):错误LNK2001:未解析的外部符号_free_dbg   1> libcpmtd.lib(xlocale.obj):错误LNK2001:未解析的外部符号_free_dbg   1> libcpmtd.lib(xwcsxfrm.obj):错误LNK2001:未解析的外部符号_free_dbg

如果我明确告诉链接器与libcmtd.lib链接,它甚至可以使用/ MT进行编译,但这会带来什么后果呢?

如何编译我的代码? (不必上面的诀窍?)

编辑:我用cout注释掉了这些语句并编译了......为什么......

3 个答案:

答案 0 :(得分:6)

你说你明确强制libcmtd.lib作为链接器输入 - 这是静态CRT的 debug 版本,并且正是与/ MT(一个声明与发布静态CRT)。

从链接器输入中完全删除libcmtd并检查它是否有效。

答案 1 :(得分:4)

从C ++预处理器中删除_DEBUG定义

答案 2 :(得分:0)

在某些情况下,我的应用程序使用/ MT,而我的libcpmtd.lib构建中没有/ MT。切换到相同即可解决问题。