文章

VS无法解析的外部命令

VS无法解析的外部命令

本文提供解决常见VS无法解析的外部命令问题。

VS无法解析的外部命令

1 只写了类声明,但还没有写实现类,造成调用时无法解析

  • 出现原因:可以看到在调用时出现错误,只在头文件中写了声明却没在对应源文件中写具体实现。
  • 解决办法:在对应源文件中添加缺少的声明实现。
  • 额外提醒:
    • 复制代码修改时需要注意;
    • 基类虚函数声明,派生类继承该函数未定义;

image-20220223221742025

2 没有导出数据

  • 出现原因:没有写导出宏,或者写了没有使用。
  • 解决办法:使用导出关键字从 DLL 中导出数据、函数、类或类成员函数。
  • 额外提醒:
    • 宏定义及使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#ifdef __DLLEXPORT_IMP 
#define __DLLEXPORT __declspec(dllexport) 
#else 
#define __DLLEXPORT __descspec(dllimport) 
#endif

class __DLLEXPORT People 
{
private:
    int m_age;
public:    
    void SetAge(int age) { m_age = age; }
    int GetAge() { return age; }
};

3 声明和定义没有统一,造成链接不一致,无法解析

  • 出现原因:可以看到在调用时出现错误,明明头文件有插件也不提示错误,其实是修改了Add(double num)接口文件,但是没有重新编译导致。
  • 解决办法:查看是否修改接口文件并重新编译,保持接口文件和链接文件版本一致。
  • 额外提醒:
    • 有时修改了接口文件,但是没有编译。

image-20220223221820818

4 出现无法解析可能是因为lib文件系统版本不一致

  • 出现原因:比如64位的编译配置,结果使用的是32位的lib包。
  • 解决办法:保持编译环境版本和链接文件版本一致。

5 没有在配置属性中包含链接库目录

  • 出现原因:没有在配置属性中包含链接库目录。
  • 解决办法:二选一即可
    • 可以在VC++目录中的包含目录添加头文件目录,库目录添加链接库目录。
    • 可以在C/C++常规中附加包含目录添加头文件目录,链接器常规中附加库目录添加链接库目录。

image-20220223224457585

6 没有在项目属性页的链接器的命令行选项加入相应的类包

  • 出现原因:一般只需要添加链接库包含目录可自动查找对应链接库,但是有时候需要自己手动添加项目需要的链接库。
  • 解决办法:在(属性=配置属性=链接器=输入=附加依赖项)中手动添加项目需要的链接库。

image-20220223223727265

本文由作者按照 CC BY 4.0 进行授权