2010-06-30 10 views
11

Così sto provando a compilare l'applicazione legacy da 32 bit a 64 bit .. Ho ricompilato tutte le librerie libere utilizzate e l'ho fatto apparire in WIN SDK6.0A x64 bit per librerie ..Simboli esterni non risolti nella compilazione dell'applicazione a 32 bit in Windows 64

sto usando:

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

Everythings finalmente in arrivo ma sto ottenendo questi errori strani simboli strani:

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 

Il problema è che questi sono tutti vincere prodotti da SDK. InterlockedDec e InterlockedInc sono provenienti da kernel32.lib GetModuleBaseName, EnumProcessModules, EnumProcesses, GetProcessMemoryInfo sono in psapi.h ma anche kernel32.lib o psapi.lib

ho controllato C: \ Program Files \ Microsoft SDK \ Windows \ v6 .0A \ Lib \ x64 e entrambe le librerie kernel32.lib e psapi.lib ci sono.

Cerca decisamente le librerie nel punto giusto. Ho attivato/VERBOSE: LIB e punta alla cartella corretta.

Quindi sono davvero confuso perché non lo trova.

Qualche idea ???

Grazie

risposta

13

Così ho finalmente capito, un po '... Non era trovare psapi.lib

In Progetto-> Linker-> dipendenze aggiuntive, invece di dire semplicemente psapi.lib ho dato percorso completo e ha funzionato ... non proprio sicuro del perché non è riuscito a trovarlo prima ma oh beh ...

+6

Se stai usando msvc puoi usare '#pragma comment (lib," psapi.lib ")' per aggiungerlo dal sorgente codice –

+0

attendere cosa w malato [commento di #pragma (lib, "psapi.lib")] fai ??? – grobartn

1

Questo è girato molto lunga (e io in realtà non credo che questo sia), ma forse le intestazioni non sono adeguatamente sorvegliate con extern "C" per la compilazione C++? Stai includendo intestazioni di sistema o semplicemente dichiarando le funzioni da te?

+0

no :(sono tutti avendo extern e tutto ... – grobartn

+0

Hai provato la ricostruzione completa? Ho notato che VC++ si "confondeva" di tanto in tanto (probabilmente dannegge il database del programma) e la ricostruzione completa di solito è stata utile. Vorrei eliminare tutti * .obj, * .exe e * .pdb in anticipo, nel caso in cui ... – Tomek

+0

lo abbia fatto troppe volte nulla .... – grobartn

1

Puoi pubblicare le tue righe di comando di compilazione e collegamento e qualsiasi # def nel tuo codice?

Questo succede se si crea un progetto semplice da zero che chiama solo uno di questi metodi?

1

Per la cronaca: Stesso problema, soluzione diversa; Ho avuto una voce per la directory

psapi 

aggiunto nella lista dei

Linker/General/Additional Library Directory 

Ciò ha comportato l'utilizzo della vecchia piattaforma VS2005 sdk psapi.lib (aveva solo 86, nessuna versione x64). Dopo aver rimosso la voce viene ora utilizzata la corretta lib dal WinSDK x64/psapi.lib installato. Quindi tieni d'occhio le missioni/ordini dei vecchi SDK &! Ovviamente anche il percorso completo funzionerà ma potrebbe essere un problema quando si utilizza il progetto su più macchine.

0

Nel mio caso (migrare da VS2008 a VS2012), problema risolto dopo l'aggiunta di psapi.lib in Linker->> input-Dipendenze aggiuntive in VS 2012.

Problemi correlati