无法解析的外部符号的几个原因

1. lib 文件未引入。

(1)在Visual Studio中"项目->属性->连接器->常规->附加库目录"写上.lib库所在文件夹;其次,"项目->属性->连接器->输入->附加依赖项"中写上.lib库的名称。
(2)使用#pragma comment(lib, “XXX.lib”)语句添加 lib 引用。

2. 类方法的实现未加类标识。

如, “CTest::Connect(void) { … }” 写成了 “Connect(void) { … }”。

3. 没有将项目需要的头文件、源文件加入项目中。
4. 引用了不匹配的lib库(相当于没有引用),比如多字节字符集的程序引用了UNICODE字符集的lib

VS中“项目-属性-常规-字符集”可更改程序的字符集,Notepad++可更改源代码的字符集。
比如在VS里更改程序字符集为Unicode,Notepad++里更改字符集为UTF-8。

5. visual studio的cpp项目中引用c的源文件

(1)将引入的.c改名为.cpp,并且右击该文件-属性-预编译头-不使用预编译头
(2)在#include XXX.h时(其中XXX.h是c代码的头文件),添加语句如下:

#ifdef __cplusplus
extern "C" {
    
    
#endif
#include "XXX.h"
#ifdef __cplusplus
}
#endif

举例

在CPP代码里添加LeapC.h的头文件,在编译完成链接时出现无法解析的外部符号LEAP_TRACKING_EVENT blablablablablablablabla main.obj,判断是静态链接库.lib出现了问题。解决过程如下:

  1. 查看项目属性已经添加过LeapC.lib
  2. 判断项目和lib库匹配嘛?包括架构(x86还是x32)、字符集(多字节字符集还是Unicode字符集)。检查后是匹配的。
  3. 以防lib库没有成功添加,加语句#pragma comment(lib, “XXX.lib”);后依然无效。
  4. LeapC.h是c的源文件,所以在Main.cpp里,添加语句
cpp
#ifdef __cplusplus
extern "C" {
    
    
#endif
#include "XXX.h"
#ifdef __cplusplus
}
#endif

链接成功。

猜你喜欢

转载自blog.csdn.net/qq_39006214/article/details/122241005
今日推荐