You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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;
}

方式二:在项目属性中添加预处理器定义

  1. 打开VS 2022的项目属性窗口
  2. 依次展开「C/C++」→「预处理器」
  3. 在「预处理器定义」中添加INITGUID
  4. 保存设置后重新编译项目

内容的提问来源于stack exchange,提问作者mans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 09:27:18