遇到一个<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版中有连接错误)
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版中有连接错误)
相关文章推荐
- SqlServer 队列读取器代理在连接<subscriber>上的<subscriber_db>时遇到错误“No specified error”
- ejb 学习:遇到错误:LazyInitializationException.<init> : failed to lazily initialize a collection of role:
- HTML中的一个不常用单非常实用的标签<fieldset>
- ecshop助理上传报错 无法连接服务器:XML 文档只能有一个顶层元素。line2 <b> Deprecated</b>:Assignig the Deprecated</b>: 7510
- spring使用@value关于<context:component-scan base-package=”com.baidu” />的一个错误
- cmake 学习之路 记录中间所遇到过的所有错误与问题的解决 <三>
- cmake 学习之路 记录中间所遇到过的所有错误与问题的解决 <二>
- VC 使用ADO连接数据库的问题!error C2059: 语法错误 : “<L_TYPE_raw>” .
- 遇到Can\'t find file : \'./mc2db/job_list.frm\' <errno: 13>错误
- Ajax的异步通信引发的一个随机性问题<1>
- cmake 学习之路 记录中间所遇到过的所有错误与问题的解决 <四>
- # include <errno.h >查看错误代码errno是调试程序的一个重要方法。当Linux C API函数发生异常时,一般会将errno变量赋值一个整数,不同的值表示不同的含义,可以通过查看
- MFC使用ADO连接数据库的问题:error C2059: 语法错误 : “<L_TYPE_raw>”
- Mybatis 使用<where>标签时遇到的一个问题与<trim>标签的使用
- C++学习:关于“std::vector<Type>::iterator”的一个错误
- 在向服务器发送请求时发生传输级错误。 (provider: TCP 提供程序, error: 0 - 远程主机强迫关闭了一个现有的连接。) ---> System.Data.SqlClient.Sql
- Ajax的异步通信引发的一个随机性问题<2> 异步请求的问题来了
- cmake 学习之路 记录中间所遇到过的所有错误与问题的解决 <一>
- <html:errors/> 一个jsp里两个或多个<html:errors/> 分别显示错误信息
- ios错误<Error>: CGContextSaveGState: invalid context 0x0. If you want to see the backtrace, please set