按照此问答中的说明,该程序可以编译但无法链接:
#include "dia2.h"
int main() { auto const clsid { CLSID_DiaSource }; }
完整的错误诊断是
main.obj : error LNK2001: unresolved external symbol _CLSID_DiaSource
这个符号在哪里定义,我需要做什么才能让链接器满意?
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 |
|
x86_64 |
|
手臂 |
|
ARM64 |
|
为所有目标平台正确添加库路径后,程序现在可以成功链接。