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.