В качестве фона я наткнулся на портирование кодовой базы 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.