码迷,mamicode.com
首页 > 其他好文 > 详细

“error LNK2019: 无法解析的外部符号”之分析

时间:2016-06-01 22:42:15      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:

http://www.cnblogs.com/hiloves/p/4678848.html

  1. 这种错误的本质是链接器无法在已编译的obj、lib或dll文件中找到函数定义。
  2. 我遇到的问题是c和c++混编。

你自己写的函数声明的头文件也写了函数定义的cpp文件也加入工程了而且你很确定函数体肯定是在这个库文件中,却依然出现LNK2019错误。可能原因:C语言和C++语言混编,因为C++支持函数重载所以C++编译器生成的库文件中的函数名会面目全非,例如C编译器会生成 _readRegmark 这个函数名,而C++编译器则生成了"void __cdecl readRegmark(char *)" (?readRegmark@@YAXPAD@Z)这么个函数名。当你的函数是用C语言写的,VS编译器会按C语言规则编译,但链接器却不知道还傻傻的用C++规则的函数名去找结果就找不到了,而你还百般肯定TM的不就在这个库中吗你个睁眼瞎。解决:在C语言的头文件中加入

#ifdef __cplusplus
extern "C" {
#endif

void readRegmark(char *regmark);  //这里写函数声明

#ifdef __cplusplus
}
#endif

    给链接器提示这个函数是C语言的,别TM找错了。

“error LNK2019: 无法解析的外部符号”之分析

标签:

原文地址:http://www.cnblogs.com/xunbu7/p/5551091.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!