此问题应该是Visual Studio的初学者最常碰到的问题,也是相对来讲很让人头疼的问题。函数
注:Error LNK2019 问题在VC 6.0 中是 error LNK2001: unresolved external symbol 问题。spa
此问题出如今编译的时候,例如:Dlgcode.obj : error LNK2019: 没法解析的外部符号 _readRegmark,该符号在函数 _AboutDlgProc@16 中被引用。code
这种错误的本质是连接器没法在已编译的obj、lib或dll文件中找到函数定义。下面是能够尝试的解决方案:orm
1. 检查项目中是不是只有头文件(有了函数声明)却没有lib。通常出现于你使用了第三方提供的库(固然若是库是本身写的,也会这样,重点是没有导入lib),下载了头文件却忘了载库文件,或库文件忘记放到相应的目录下了。blog
2. 若是进行上面的检查后发现并无问题,头文件没问题,cpp文件也没问题,相应的库都正常引入了,可是依旧出现LNK2019错误。此时咱们就应该从代码层面去排查问题了。颇有多是C语言和C++语言混编致使的问题。由于C++支持函数重载,因此C++编译器生成的库文件中的函数名会面目全非。编译器
例如C编译器会生成 _readRegmark 这个函数名,而C++编译器则生成了"void __cdecl readRegmark(char *)" (?readRegmark@@YAXPAD@Z)这么个函数名。io
当你的函数是用C语言写的,VS编译器会按C语言规则编译,但连接器殊不知道还傻傻的用C++规则的函数名去找结果就找不到了。编译
解决办法:在C语言的头文件中加入extern "C",代码方式以下:form
extern "C" { #include "libavcodec/avcodec.h" #include "libavformat/avformat.h" #include "libavcodec/avcodec.h" #include "libswscale/swscale.h" #include "libavutil/imgutils.h" #include <libswresample/swresample.h> #include "SDL.h" }