一个常见的link错误
初学者在使用c++调用第三方的c代码或者c动态库时,很容易遇到unresolved external symbol的问题。如果没有经验会感到很困惑,因为这个提示表示编译器在做link的时候找不到相应的符号,就像是对应的函数没有定义。可以,我们确实已经定义了。
原因
c++由于重载的需要在编译阶段创建函数的符号时,会把函数的参数类型,个数,函数本身的const属性等等合并起来,一起做一个符号,可以将同样名称的函数编译成完全两个不同的符号,在链接阶段作为两个不同的函数使用。所以,才出现了c++调用c时找不到符号的问题。
解决办法
既然知道了原因,那么解决办法很简单,c++调用c时可以写成下边的方式,
// c++ file
extern "C"
{
#include "cheaderfile.h"
}
<