vs2015等系列IDE有时候报Link错误:LNK2019 unresolved external symbol xxx referenced in function "int __cdecl xxxx(void)
出现这种问题有几种情况:
1,函数只有声明,没有实现
2,调用静态库里的函数,却没有把lib文件引入到工程中(需要 #pragma comment(lib, "xxx.lib"))
3,函数声明、实现和调用时的参数不一致
4,调用约定、规范不一致。c++调用c函数,需要声明extern "C",如
extern "C"
{
#include "foo.h"
}
int main()
{
foo();
return 0;
}
其中第四点有个比较特殊的情况,容易让人反复检查而摸不着头脑,那就是实现文件的后缀名。如果实现文件的后缀名是cpp,那么编译器就认为它里边实现的函数是c++函数,如果你认为你实现的是c函数,在c++程序里调用的时候,加上了extern "C",编译器就会报LNK2019 unresolved external symbol的错误,原因还是因为调用约定、规范不一致。即加上了extern "C",编译器认为它是c函数,结果这个函数在cpp文件里实现,编译器又认为它是c++函数,造成了冲突。