我正在尝试将我的可执行文件部署到另一台机器上,因此我需要非调试运行时。
切换到非调试运行时/ 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注释掉了这些语句并编译了......为什么......
答案 0 :(得分:6)
你说你明确强制libcmtd.lib作为链接器输入 - 这是静态CRT的 debug 版本,并且正是与/ MT(一个声明与发布静态CRT)。
从链接器输入中完全删除libcmtd并检查它是否有效。
答案 1 :(得分:4)
从C ++预处理器中删除_DEBUG定义
答案 2 :(得分:0)
在某些情况下,我的应用程序使用/ MT,而我的libcpmtd.lib构建中没有/ MT。切换到相同即可解决问题。