2010-06-30 25 views
11

Por lo tanto, estoy intentando 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 bits en las librerías ..Símbolos externos no resueltos en la compilación de la aplicación de 32 bits en Windows 64

estoy usando:

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

Everythings finalmente llegando, pero yo 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 estos son todos ganan cosas de SDK. InterlockedDec y InterlockedInc son procedentes de kernel32.lib GetModuleBaseName, EnumProcessModules, EnumProcesses, GetProcessMemoryInfo están en psapi.h sino también kernel32.lib o psapi.lib

he comprobado C: \ Archivos de programa \ Microsoft SDKs \ Windows \ v6 .0A \ Lib \ x64 y ambas librerías kernel32.lib y psapi.lib están allí.

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

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

¿Alguna idea ???

Gracias

Respuesta

13

Así que finalmente lo descubrió, un poco ... No era encontrar psapi.lib

En Proyecto-> Linker-> dependencias adicionales en vez de decir psapi.lib di ruta completa a la misma y funcionó ... no estoy seguro de por qué no lo encontró antes, pero bueno ...

+6

Si está usando msvc puede usar '#pragma comment (lib," psapi.lib ")' para agregar eso de la fuente código. –

+0

espere lo que w ¿Este [#pragma comment (lib, "psapi.lib")] do ??? – grobartn

1

Esto es muy largo disparo (y yo realmente no creo que esto es), pero tal vez los encabezados no están vigiladas adecuadamente con extern "C" para C++ compilación? ¿Está incluyendo los encabezados del sistema o simplemente declarando las funciones usted mismo?

+0

nop :(todos ellos están teniendo extern y todo ... – grobartn

+0

¿Ha intentado la reconstrucción completa? Me di cuenta de que VC++ se "confunde" de vez en cuando (probablemente arruina la base de datos del programa) y la reconstrucción completa generalmente me ayudó. Eliminaría todos los * .obj, * .exe y * .pdb de antemano, por si acaso ... – Tomek

+0

hizo eso demasiadas veces nada ... – grobartn

1

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

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

1

Para el registro: Mismo problema, solución diferente; que tenía una entrada para el directorio

psapi 

añaden en la lista de

Linker/General/Additional Library Directory 

Esto resultó en el uso de la vieja plataforma psapi.lib VS2005 SDK (que sólo tenía x86, x64 ninguna versión) Después de eliminar la entrada, se usa ahora la lib correcta del WinSDK x64/psapi.lib instalado. ¡Esté atento a las mezclas/pedidos de los nuevos SDK de &! Obviamente, la ruta completa también funcionará pero puede ser un problema cuando utiliza el proyecto en varias máquinas.

0

En mi caso (migrar de VS2008 a VS2012), tema resuelto después de añadir psapi.lib en Linker-> input-> Dependencias adicionales en VS 2012.

Cuestiones relacionadas