c语言未解析的外部标志,“error LNK2019: 无法解析的外部符号”之分析
最近在用VS2008或更高版本开发,初学遇到不少问题,最头疼的问题之一就是:LNK2019。
百度一下讲的并不够全面,反正都没解决我的问题。
error LNK2019问题在VC 6.0中是error LNK2001: unresolved external symbol问题,可能错误号改了。
编译时出现类似这样错误:Dlgcode.obj : error LNK2019: 无法解析的外部符号 _readRegmark,该符号在函数 _AboutDlgProc@16 中被引用。这种错误本质是链接器无法在已编译的obj、lib或dll文件中找到函数定义。
1、这是百度找到的方法:http://jingyan.baidu.com/article/4d58d54135d7a79dd4e9c0ad.html。就是有头文件(有了函数声明)却没有lib。一般出现于你使用了第三方提供的库,下载了头文件却忘了载库文件,或库文件忘记放到相应的目录下了。
2、你自己写的函数声明的头文件也写了函数定义的cpp文件,却依然出现LNK2019错误。可能原因:忘记将这两个文件加入工程了。一般出现于用Visual Studio和记事本(或UltraEdit)混合开发过程,你用记事本include了相应的头文件,却忘了在Visual Studio的工程中加入它们了。也可能出现于在解决方案的开发过程,在解决方案下的某个工程中加入了它们却忘了在其他工程中加入。这个问题类似于第1个,不同的是这个库是你自己提供的,但没有把它交给VS 2008编译出来。
3、你自己写的函数声明的头文件也写了函数定义的cpp文件也加入工程了而且你很确定函数体肯定是在这个库文件中,却依然出现LNK2019错误。可能原因:C语言和C++语言混编,因为C++支持函数重载所以C++编译器生成的库文件中的函数名会面目全非,例如C编译器会生成 _readRegmark 这个函数名,而C++编译器则生成了"void __cdecl readRegmark(char *)" (?readRegmark@@YAXPAD@Z)这么个函数名。当你的函数是用C语言写的,VS编译器会按C语言规则编译,但链接器却不知道还傻傻的用C++规则的函数名去找结果就找不到了,而你还百般肯定TM的不就在这个库中吗你个睁眼瞎。解决:在C语言的头文件或主动调用的main.cpp文件的最开始部分加入如下代码:
#ifdef __cplusplusextern "C"{#endif
void readRegmark(char *regmark); //这里写函数声明
#ifdef __cplusplus
}#endif
给链接器提示这个函数是C语言的,别TM找错了。
碰到“error LNK2019: 无法解析的外部符号”
有一个解决方案,有两个工程A,B。工程B中定义了一个类,在工程A的demo.cpp中引用该类,但是如果是#include "XX,h",则会出现“error LNK2019: 无法解析的外部符号”;如果是#include "XX.cpp",则可以顺利编译通过。
想来是因为引用 .h 文件导致找不到.cpp中的定义,而引用.cpp可以通过.cpp找到.h(.cpp有对.h的include)。但是如果同在工程B下面,则#include "XX,h"也是正确的,它会自动关联到同名的(反正是对应的).cpp文件。在不同工程中应该如何引用呢?
看见一种原因分析,如下:现场情况:
funcname 在文件file.cpp/h中定义实现void funcname(void) {;}
filecall.c文件内呼叫funcname()函数。
就会出现上面情况。
症因:因c/c++混合编程, c文件内函数无法呼叫c++文件内函数。
解决办法:或者将c文件名改为.cpp,或者将c++文件名改为.c。上面的解决采用将 file.cpp 更名为file.c即可。
c语言未解析的外部标志,“error LNK2019: 无法解析的外部符号”之分析相关推荐
- C语言LNK2019错误怎么解决,error LNK2019: 无法解析的外部符号 (解决方法)
在用C++进行套接字编程时遇到下面的错误: 1>------ 已启动生成: 项目: NetClient, 配置: Debug Win32 ------ 1> NetClient.cpp ...
- error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCR... 2011年08月05日 09:08:15
经过测试,能解决问题 error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainCR... 一,问题描述 MSVCRTD.lib(crtexew.obj) ...
- MSVCRTD.lib(crtexew.obj) : error LNK2019: 无法解析的外部符号 _WinMain@16
1.问题描述 做开源项目时,碰到VS2010报错如下: MSVCRTD.lib(crtexew.obj) : error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 _ ...
- error LNK2019: 无法解析的外部符号 WinMain,该符号在函数 int __cdecl invoke_main(void)”中被引用
From:https://blog.csdn.net/u012570056/article/details/74639894 一,问题描述 MSVCRTD.lib(exe_winmain.obj) : ...
- 在cocos2dx2.2.3中遇到的error LNK2019: 无法解析的外部符号 _libiconv_closexxxxxxx的解决办法
转自:http://blog.csdn.net/wxq_wuxingquan/article/details/44978031 conv是Cocos2dx自带的非常好用的可以解决中文乱码问题的库,但是 ...
- CyAPI.lib(CyAPI.obj) : error LNK2019: 无法解析的外部符号...
1>------ 已启动生成: 项目: S_BulkLoop, 配置: Debug Win32 ------ 1>生成启动时间为 2014/3/14 17:52:26. 1>Init ...
- Main.obj : error LNK2019: 无法解析的外部符号 _Direct3DCreate9@4,该符号在函数 long __cdecl InitD3D(struct HWND__ *)
错误问题: Main.obj : error LNK2019: 无法解析的外部符号 _Direct3DCreate9@4,该符号在函数 "long __cdecl InitD3D(struc ...
- error LNK2019: 无法解析的外部符号 XXXXXXXXX,该符号在函数XXX中被引用
如:在调用ffmpeg接口时,出现如下错误: 1>decede.obj : error LNK2019: 无法解析的外部符号 "struct AVFrame * __cdecl av_ ...
- error LNK2019: 无法解析的外部符号 “public: __cdecl ...,函数 ...中引用了该符号解决办法
vs报错输出如下所示: 1>myview.obj : error LNK2019: 无法解析的外部符号 "public: __cdecl CSPReport::CSPReport(vo ...
最新文章
- GridView隐藏列取值解决方案
- 二胖写参数校验的坎坷之路
- 如何写一份优秀的Java程序员简历?
- 登录界面的滑动_【提醒】电子税务局登录方式有变化! 8月31日关闭“原方式登录”...
- UDP、广播、多播与IGMP(七)
- 爱屋及乌 年轻投资者因喜爱Snapchat亏钱也买Snap股票
- 电商前台模板中文html5_跨境电商平台上产品如何上传?虾皮新版批量上传工具使用指南分享...
- IntelliJ IDEA代码分屏显示
- 微信公众平台——被动回复用户消息
- java script数据类型_javascript 六种数据类型
- Swift封装 滑出式导航栏
- 中ridge_10种线性代数在数据科学中的强大应用(内附多种资源)
- css图片等比例裁剪
- GitHub#python#:ppt(批量)转换为pdf
- Java — Arrays.toString(string[]) + Enumeration.hasMoreElements()【Arrays类、Enumeration接口】
- android 息屏锁频录音、录视频、电话自动录音
- vsftpd安装包下载
- Charles 抓包手机无法上网
- beta阶段测试基本概况对应机型硬件信息
- python中输入多个值用什么符号隔开_字典中多个元素之间使用