DLL中未解决的符号错误

use*_*488 7 windows linker dbghelp

作为背景,我遇到了将中型Linux代码库(编译成巨型.so)移植到x64窗口(编译成.dll).我有连接器问题.

作为一个最小的测试用例,如果我只从以下文件创建一个Visual Studio项目:

#include <Windows.h>
#include <Dbghelp.h>

void do_stuff(char const * s)
{
  char buffer[4096];
  long int len = UnDecorateSymbolName(
    s,
    buffer,
    sizeof(buffer),
    UNDNAME_COMPLETE);
}
Run Code Online (Sandbox Code Playgroud)

我将项目类型设置为DLL并构建它,我收到错误"LNK2001:未解析的外部符号__imp_UnDecorateSymbolName".也就是说,文件正确编译,但无法链接到dll.

我认为目标是我的dll链接到dbghelp.dll,特别是因为(至少在我的系统上)没有像dbghelp.lib这样的文件.那么为什么现在尝试解析该符号,而不是当我的DLL加载到应用程序中时呢?为什么它无论如何都看不到这个功能呢?

为了清楚起见,我已经确认我正在构建x64 DLL,并且C:\ Windows\System32中的dbghelp.dll是x64.

Dav*_*nan 15

链接到共享库,Windows中的DLL,需要以下内容:

  1. 编译时的头文件:Dbghelp.h.
  2. 链接时的导入库:Dbghelp.lib.
  3. 在运行时DLL: Dbghelp.dll.

您显然有1和3并且缺少2. Visual Studio附带的Windows SDK包含导入库.但是您需要将其添加为项目链接器选项中的附加依赖项.

像这样:

在此输入图像描述

  • 或者你可以#pragma comment(lib,"dbghelp.lib") (6认同)
  • 就是这样。我的 windows-search-fu 很弱,我的系统 * 确实 * 有 dbghelp.lib。将它添加到依赖项就像一个魅力。 (2认同)