windows - uløste symbol fejl inden for DLL

Indlæg af Hanne Mølgaard Plasc

Problem



For baggrunden har jeg stødt på denne porting af en mellemstor linux-kodebase (kompilering til en kæmpe .so) til x64-vinduer (kompilering til en .dll). Jeg har haft linker problemer.


Som en minimal testcase, hvis jeg opretter et Visual Studio-projekt fra netop følgende fil:


#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);
}


Og jeg sætter projekttypen til DLL og bygger den, jeg får en fejl 'LNK2001: Uopløst eksternt symbol \_\_imp\_UnDecorateSymbolName'. Det vil sige, at filen kompilerer ordentligt, men undlader at linke ind i en dll.


Jeg tror, ​​at målet er, at min dll skal linke til dbghelp.dll, især siden (i hvert fald på mit system) er der ingen sådan fil som en dbghelp.lib. Så hvorfor forsøger det at løse dette symbol nu, snarere så når min DLL er indlæst i en ansøgning? Og hvorfor kan det ikke se den funktion i hvert fald?


For at være klar har jeg bekræftet, at jeg bygger x64 DLL, og at dbghelp.dll i C: \ Windows \ System32 er x64.

Bedste reference


Kobling til delte biblioteker, DLL'er i Windows-tale, kræver følgende:



  1. En headerfil på kompileringstid: Dbghelp.h.

  2. Et importbibliotek på linketid: Dbghelp.lib.

  3. En DLL ved kørselstid: Dbghelp.dll.



Du har tydeligt 1 og 3 og mangler 2. Windows SDK, der leveres med Visual Studio, indeholder importbiblioteket. Men du skal tilføje det som en yderligere afhængighed i dine projektets linker muligheder.


Sådan her:


Indtast billedbeskrivelse her