对于后台,我遇到过将中型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。
答案 0 :(得分:13)
链接到共享库,Windows中的DLL,需要以下内容:
Dbghelp.h
。Dbghelp.lib
。Dbghelp.dll
。您显然有1和3并且缺少2. Visual Studio附带的Windows SDK包含导入库。但是您需要将其添加为项目链接器选项中的附加依赖项。
像这样: