链接错误

Posted ice-arrow

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链接错误相关的知识,希望对你有一定的参考价值。

以下是可能导致LNK2001或者LNK2019的链接错误

1、缺少相应的库文件(lib)。一般出现于你使用了第三方提供的库,下载了头文件却忘了载库文件,或库文件忘记放到相应的目录下了。在 链接->输入 填入附加函数依懒。

2、你自己写的函数声明的头文件也写了函数定义的cpp文件,却依然出现LNK2019错误。

  可能原因:忘记将这两个文件加入工程了。

3、你自己写的函数声明的头文件,也写了函数定义的cpp文件也加入工程了而且你很确定函数体肯定是在这个库文件中,却依然出现LNK2019错误。

  可能原因:C语言和C++语言混编,因为C++支持函数重载所以C++编译器生成的库文件中的函数名会面目全非,例如C编译器会生成 _readRegmark 这个函数名,而C++编译器则生成了"void __cdecl readRegmark(char *)" ([email protected]@[email protected])这么个函数名。当你的函数是用C语言写的,VS编译器会按C语言规则编译,但链接器却不知道还傻傻的用C++规则的函数名去找结果就找不到了。解决:在C语言的头文件中加入以下代码

1 #ifdef __cplusplus
2 extern "C" 
3 #endif
4 
5 void readRegmark(char *regmark);  //这里写函数声明
6 
7 #ifdef __cplusplus
8 
9 #endif

4、模板声明和实现要放在同一文件夹中。模版函数声明与实现文件要在同一文件夹中。有时候前面函数的声明 与 后面的 函数的定义 时的参数类型不同时,compile能通过,但link会出现LNK2019错误!

5、内联函数定义在头文件中(一般需要定义在cpp中)。

6、错误的工程类型等等。

以上是关于链接错误的主要内容,如果未能解决你的问题,请参考以下文章

为啥链接器链接了错误的函数?

显式链接错误 - 语法错误:缺少 ';'由 bazel 编译时在 '*' 之前

C++编译链接错误

GLEW 链接器错误

奇怪的链接器错误

为啥我会收到此错误?返回标签错误(页面没有链接回来)