作为背景,我遇到了将中型 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。