Неразрешенные символьные ошибки в DLL

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

7
задан user1243488 1 March 2012 в 19:41
поделиться