VS无法解析的外部命令
VS无法解析的外部命令
本文提供解决常见VS无法解析的外部命令问题。
VS无法解析的外部命令
1 只写了类声明,但还没有写实现类,造成调用时无法解析
- 出现原因:可以看到在调用时出现错误,只在头文件中写了声明却没在对应源文件中写具体实现。
- 解决办法:在对应源文件中添加缺少的声明实现。
- 额外提醒:
- 复制代码修改时需要注意;
- 基类虚函数声明,派生类继承该函数未定义;
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)
接口文件,但是没有重新编译导致。 - 解决办法:查看是否修改接口文件并重新编译,保持接口文件和链接文件版本一致。
- 额外提醒:
- 有时修改了接口文件,但是没有编译。
4 出现无法解析可能是因为lib文件系统版本不一致
- 出现原因:比如64位的编译配置,结果使用的是32位的lib包。
- 解决办法:保持编译环境版本和链接文件版本一致。
5 没有在配置属性中包含链接库目录
- 出现原因:没有在配置属性中包含链接库目录。
- 解决办法:二选一即可
- 可以在VC++目录中的包含目录添加头文件目录,库目录添加链接库目录。
- 可以在C/C++常规中附加包含目录添加头文件目录,链接器常规中附加库目录添加链接库目录。
6 没有在项目属性页的链接器的命令行选项加入相应的类包
- 出现原因:一般只需要添加链接库包含目录可自动查找对应链接库,但是有时候需要自己手动添加项目需要的链接库。
- 解决办法:在(属性=配置属性=链接器=输入=附加依赖项)中手动添加项目需要的链接库。
本文由作者按照 CC BY 4.0 进行授权