VS2022中使用DEFINE_GUID出现LNK2001未解析外部符号问题求助
LNK2001: 未解析外部符号MyGuid的原因及解决办法
问题代码
// Include guiddef.h #include <guiddef.h> // Define GUID DEFINE_GUID(MyGuid, 0x12345678, 0x1234, 0x5678, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0); int main() { // Initialize variable with defined GUID GUID guid = MyGuid; // Can also directly use MyGuid return 0; }
编译错误
Error LNK2001 unresolved external symbol MyGuid testApplication 1
错误原因
这个链接错误的核心问题是DEFINE_GUID宏的行为受预处理器宏INITGUID控制:
- 默认情况下,没有定义
INITGUID时,DEFINE_GUID只会生成MyGuid的外部声明(相当于告诉编译器“这个变量在别处定义”),不会在当前编译单元生成实际的变量实体。 - 链接阶段需要找到
MyGuid的实际定义,但此时没有任何编译单元提供这个实体,所以抛出未解析外部符号的错误。
解决办法
有两种简单的修复方式:
方式一:在包含头文件前定义INITGUID
修改代码,在包含<guiddef.h>之前添加#define INITGUID,这样DEFINE_GUID会直接生成MyGuid的变量定义:
#define INITGUID #include <guiddef.h> // Define GUID DEFINE_GUID(MyGuid, 0x12345678, 0x1234, 0x5678, 0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC, 0xDE, 0xF0); int main() { GUID guid = MyGuid; return 0; }
方式二:在项目属性中添加预处理器定义
- 打开VS 2022的项目属性窗口
- 依次展开「C/C++」→「预处理器」
- 在「预处理器定义」中添加
INITGUID - 保存设置后重新编译项目
内容的提问来源于stack exchange,提问作者mans
相关产品推荐
相关产品推荐

