Dla tła, natknąłem się na ten porting średnich linux codebase (kompilacja w gigantyczne .so) do x64 Windows (kompilacja do .dll). Miałem problemy z linkerem.Nierozwiązane błędy symboli wewnątrz DLL
Jako minimalną testcase, jeśli tworzę projekt Visual Studio już od następującego pliku:
#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);
}
I ustawić typ projektu do DLL i budować, to pojawia się błąd „LNK2001: Nierozwiązane zewnętrzne symbol __imp_UnDecorateSymbolName ". Oznacza to, że plik jest kompilowany poprawnie, ale nie łączy się z biblioteką DLL.
Myślę, że celem jest dll link do dbghelp.dll, zwłaszcza, że (przynajmniej w moim systemie) nie ma takiego pliku jako dbghelp.lib. Dlaczego więc próbuje on teraz rozwiązać ten symbol, a nie wtedy, gdy moja biblioteka DLL jest ładowana do aplikacji? I dlaczego nie może w ogóle zobaczyć tej funkcji?
Dla jasności potwierdziłem, że buduję bibliotekę DLL x64, a plik dbghelp.dll w C: \ Windows \ System32 to x64.
to musi jeszcze połączyć z dbghelp.lib biblioteki import; to powinno być zawarte w Visual Studio, Platform SDK itp. – Luke