遇到一个<iostream>引发的非常难缠的连接错误LNK2001

在把一个解决方案编译成release版的过程中。遇到了一个非常难缠的bug

3>libcpmtd.lib(xdebug.obj) : error LNK2001: unresolved external symbol __malloc_dbg

3>libcpmtd.lib(xdebug.obj) : error LNK2001: unresolved external symbol __free_dbg

我的解决方案里很多项目都是公共的,很多解决方案release版没有问题,惟独一个openMSX项目报出如上错误。

然后我将libcpmtd.lib屏蔽后,出现

1>std_r.lib(ConsoleCtrl.obj) : error LNK2001: unresolved external symbol "void * __cdecl operator new[](unsigned int,struct std::_DebugHeapTag_t const &,char *,int)" (??_U@YAPAXIABU_DebugHeapTag_t@std@@PADH@Z)
1>std_r.lib(ConsoleCtrl.obj) : error LNK2001: unresolved external symbol "struct std::_DebugHeapTag_t const & __cdecl std::_DebugHeapTag_func(void)" (?_DebugHeapTag_func@std@@YAABU_DebugHeapTag_t@1@XZ)

错误。打开consoleCtrl.h发现里面引入了#include <iostream>。怀疑是与其他类似于#include <stdio.h>之类的冲突造成的。故而去掉#include <iostream>引用以后,问题不在出现.(libcpmtd.lib也不必屏蔽)

--------------------------------------------------------------

最后仔细研读代码发现,其他项目都不是控制台项目.只有OpenMSX是控制台项目,在OPenMSX.exe项目中使用了std项目的一个cls()控制台清屏函数造成的。这个函数在ConsoleCtrl.H下定义。找到问题后,解决就变得容易多了.

-------------------------------------------------------------------------------------

 cls()函数中使用了system("cls"),而system函数的定义是在 stdlib.h中。 我怀疑#include <iostream>也包含了system函数的定义(因为之前consoleCtrl中并未引入stdlib而是引入了<iostream>,debug版中cls()函数工作正常,只是release版中有连接错误)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值