Для справки, я сталкивался с портированием базы кода 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 и что dbghelp.dll в C: \ Windows \ System32 - это x64.