windows - DLL 中 Unresolved 符号错误

标签 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);
}

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

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

明确地说,我已经确认我正在构建 x64 DLL,并且 C:\Windows\System32 中的 dbghelp.dll 是 x64。

最佳答案

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

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

您显然有 1 和 3 而缺少 2。Visual Studio 附带的 Windows SDK 包括导入库。但是您需要将它作为附加依赖项添加到项目的链接器选项中。

像这样:

enter image description here

关于windows - DLL 中 Unresolved 符号错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9522834/

相关文章:

windows - 适用于 Windows 的 svn 客户端二进制文件

c# - 如何显示 C# 窗口服务的系统托盘图标?

c++ - 链接错误 : QtCore. framework/Versions/4/QtCore for architecture x86_64

c++ - 如何在不使用 dbghelp.dll 的情况下在 Windows 上获取堆栈跟踪?

windbg - 使用 dbghelp 查找类方法的符号地址

.net - .NET PDB文件的格式(模式)是什么?

c++ - 帮助在 Windows 上使用 g++ 构建

javascript - 无法在Windows上为redis-64添加密码

opengl - 在 Linux 上为 Windows 交叉编译 OpenGL/glew

assembly - 为什么汇编程序仅在与 crt1.o crti.o 和 crtn.o 链接时才起作用?