windows linker dbghelp

windows - Errores de símbolos no resueltos en DLL



linker dbghelp (1)

El enlace a bibliotecas compartidas, DLL en Windows-speak, requiere lo siguiente:

  1. Un archivo de encabezado en tiempo de compilación: Dbghelp.h .
  2. Una biblioteca de importación en tiempo de enlace: Dbghelp.lib .
  3. Una DLL en tiempo de ejecución: Dbghelp.dll .

Claramente tiene 1 y 3 y faltan 2. El SDK de Windows que viene con Visual Studio incluye la biblioteca de importación. Pero debe agregarlo como una dependencia adicional en las opciones del vinculador de su proyecto.

Me gusta esto:

Para el fondo, me he topado con esta portación de una base de código de Linux de tamaño mediano (compilando en un .so gigante) a x64 windows (compilando en un .dll). He tenido problemas con los conectores.

Como un caso de prueba mínimo, si creo un proyecto de Visual Studio solo a partir del siguiente archivo:

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

Y configuro el tipo de proyecto para DLL y lo construyo, obtengo un error "LNK2001: Símbolo externo no resuelto __imp_UnDecorateSymbolName". Es decir, el archivo se compila correctamente, pero no se puede vincular a un dll.

Creo que el objetivo es que mi dll se vincule con dbghelp.dll, especialmente porque (al menos en mi sistema) no existe un archivo como dbghelp.lib. Entonces, ¿por qué está tratando de resolver ese símbolo ahora, en lugar de cuando mi DLL se carga en una aplicación? ¿Y por qué no puede ver esa función de todos modos?

Para que quede claro, he confirmado que estoy compilando la DLL x64 y que dbghelp.dll en C: / Windows / System32 es x64.