基于Windows的SDK制作了示例程序,再构建解决方案时出现如下错误:
1.首先咨询了ChatGPT:
问: What does it mean when “LNK2001 unresolved external symbol “public: enum TUCAMRET __cdecl CameraManager::CloseCamera(void)” (?CloseCamera@CameraManager@@QEAA?AW4TUCAMRET@@XZ)” happened in Visual Studio?
答:
您看到的错误消息 LNK2001 未解析的外部符号,通常表示有一个函数声明(在您的情况下为 CameraManager::CloseCamera()),但它的定义(实现)在编译过程中缺失或未正确链接。
以下是错误消息各部分含义的详细说明:
(1) LNK2001: 这是来自 Visual Studio 链接器的错误代码。LNK2001 具体指无法解析的外部符号,这意味着存在函数或变量声明,但链接器无法找到其定义(实际实现)。
(2) 这个语句:
unresolved external symbol "public: enum TUCAMRET __cdecl CameraManager::CloseCamera(void)" (?CloseCamera@CameraManager@@QEAA?AW4TUCAMRET@@XZ)
这部分错误信息指出链接器找不到“CameraManager::CloseCamera()”。
可能的原因:
<1> Missing Implementation(执行缺失):
最常见的原因是,应该实现 CameraManager::CloseCamera() 的 .cpp 文件不存在,或者不包含该函数的实现。
<2> Incorrect Function Signature(函数签名不正确):
如果声明(在头文件 .h 或 .hpp 中)与实现(在 .cpp 文件中)不匹配,例如返回类型或参数列表不同,则链接器将无法解析该符号。
<3> Linker Settings(链接器设置):
有时,包含实现的文件(本例中为 CameraManager.cpp)可能未包含在 Visual Studio 项目设置中要编译和链接的源文件列表中。请确保项目中包含所有必需的文件。
解决办法:
第一步: 检查执行,验证“CameraManager::CloseCamera()”的实现就在合适的.cpp文件中。
第二步,如果您使用外部库或依赖项,请确保它们正确链接并包含在您的项目设置中。
第三步,清理并重建您的解决方案以确保所有更改都得到正确传播。
解决方案:
很简单,在选择配置属性->链接器->输入在“附加依赖项”中填写.lib文件的完整路径而不是光写个文件名就行了,就像这样: