构建 DIA 代码失败,出现 LNK2001:无法解析的外部符号 _CLSID_DiaSource

问题描述 投票:0回答:1

按照此问答中的说明,该程序可以编译但无法链接:

#include "dia2.h"

int main() { auto const clsid { CLSID_DiaSource }; }

完整的错误诊断是

main.obj : error LNK2001: unresolved external symbol _CLSID_DiaSource

这个符号在哪里定义,我需要做什么才能让链接器满意?

c++ c winapi dia-sdk
1个回答
0
投票

DIA 的接口和类 ID 在名为

diaguids.lib
的静态库中定义。它需要作为输入传递给链接器。一个简单的方法是通过
comment
pragma
:

#include "dia2.h"
#pragma comment(lib, "diaguids")

int main() { auto const iid { CLSID_DiaSource }; }

但这还不够。链接器仍然会出错

LINK : fatal error LNK1104: cannot open file 'diaguids.lib'

要解决此问题,必须在构建环境中设置(特定于平台的)库路径。 DIA SDK 选择了一种奇怪的布局和命名方案,这使得设置起来有些乏味。这也不仅仅是我的问题:Dia2dump 示例无法链接到非 x86 的任何平台。

在 Visual Studio 中,可以通过右键单击项目,选择 “属性”,然后导航到 “配置属性” -> “VC++ 目录”来添加库目录。 “库目录” 配置需要更新以包含根据此表的目录:

平台 目录
x86
$(VSInstallDir)DIA SDK\lib
x86_64
$(VSInstallDir)DIA SDK\lib\amd64
手臂
$(VSInstallDir)DIA SDK\lib\arm
ARM64
$(VSInstallDir)DIA SDK\lib\arm64

为所有目标平台正确添加库路径后,程序现在可以成功链接。

© www.soinside.com 2019 - 2024. All rights reserved.