您的位置:首页 > 移动开发 > IOS开发

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

2013-12-25 15:12 525 查看
在把一个解决方案编译成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版中有连接错误)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐