x32 sistemas programas programa para hacer funcionar emulador ejecutar cómo convertir compatibles como aplicaciones c++ visual-studio-2008 winapi win64 kernel32

c++ - programas - hacer compatibles aplicaciones de 64 bits en sistemas de x32



Símbolos externos no resueltos en la compilación de aplicaciones de 32 bits en Windows 64 (5)

Así que estoy tratando de compilar aplicaciones heredadas de 32 bits a 64 bits. Re compilé todas las librerías que usaba y las hice analizar en WIN SDK6.0A x64 bit para libs.

Estoy usando:

  • Visual Studio Professional Edition 2008
  • Visual C ++
  • dotNet Framework 3.5 SP1
  • Windows Server 2008R2
  • Windows SDK es 6.0A

Todo finalmente se acerca, pero estoy recibiendo estos extraños errores de símbolos indefinidos:

error LNK2019: unresolved external symbol InterlockedDecrement referenced in function ... error LNK2019: unresolved external symbol InterlockedIncrement referenced in function ... error LNK2019: unresolved external symbol GetModuleBaseName referenced in ... error LNK2019: unresolved external symbol EnumProcessModules referenced in ... error LNK2019: unresolved external symbol EnumProcesses referenced in ... error LNK2019: unresolved external symbol GetProcessMemoryInfo referenced

El problema es que estas son todas cosas ganadoras de SDK. InterlockedDec e InterlockedInc provienen de kernel32.lib GetModuleBaseName, EnumProcessModules, EnumProcesses, GetProcessMemoryInfo están en psapi.h pero también kernel32.lib o psapi.lib

Revisé C: / Program Files / Microsoft SDKs / Windows / v6.0A / Lib / x64 y ambos libs kernel32.lib y psapi.lib están ahí.

Definitivamente busca las libs en el lugar correcto. Encendí / VERBOSE: LIB y apunta a la carpeta correcta.

Así que estoy realmente confundido por qué no los está encontrando.

¿¿¿Algunas ideas???

Gracias


Esta es una posibilidad muy remota (y realmente no creo que sea esto) pero tal vez los encabezados no están debidamente protegidos con la "C" externa para la compilación de C ++. ¿Está incluyendo los encabezados del sistema o simplemente declarando las funciones usted mismo?


¿Puedes publicar tus líneas de comando de compilación y enlace, y cualquier # def en tu código?

¿Esto sucede si haces un proyecto simple desde cero que solo llama a uno de esos métodos?


Así que finalmente lo descubrí, un poco ... No fue encontrar psapi.lib

En Proyecto-> Enlazador-> Dependencias adicionales en vez de solo decir psapi.lib, le di un camino completo y funcionó ... no estoy seguro de por qué no lo encontró antes, pero bueno ...


Para el registro: el mismo problema, diferente solución; Tenía una entrada para el directorio

psapi

agregado en la lista de

Linker/General/Additional Library Directory

Esto dio como resultado el uso de la antigua plataforma VS2005 sdk psapi.lib (solo tenía la versión x86, no x64). Después de eliminar la entrada, se utiliza ahora la lib correcta del WinSDK x64 / psapi.lib instalado. ¡Así que esté atento a las mezclas / pedidos de SDK antiguos y nuevos! Obviamente, la ruta completa también funcionará, pero podría ser un problema cuando utilice el proyecto en varias máquinas.


En mi caso (migrar de VS2008 a VS2012), se solucionó el problema después de agregar psapi.lib en Linker-> input-> Additional Dependencies en VS 2012.