2010-06-30 9 views
11

Also ich versuche, Legacy-App von 32 Bit auf 64 Bit zu kompilieren .. Ich kompilierte alle verwendeten Bibliotheken und machte es in WIN SDK 6.0A x64-Bit für libs ..Ungelöste externe Symbole in 32-Bit-Anwendung in Windows 64 kompilieren

ich verwende:

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

Every schließlich kommen, aber ich diese seltsamen Fehler wegen undefinierter Symbole bekommen:

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 

Das Problem ist, das sind alles Sachen von SDK gewinnen. InterlockedDec und InterlockedInc aus kernel32.lib kommenden GetModuleBaseName, EnumProcessModules, EnumProcesses sind GetProcessMemoryInfo in psapi.h aber auch kernel32.lib oder psapi.lib

Ich habe C: \ Programme \ Microsoft SDKs \ Windows \ v6 .0A \ Lib \ x64 und beide Bibliotheken kernel32.lib und psapi.lib sind da.

Es sieht definitiv die libs an der richtigen Stelle. Ich habe/VERBOSE: LIB eingeschaltet und es zeigt auf den richtigen Ordner.

So bin ich wirklich verwirrt, warum es nicht gefunden wird.

Irgendwelche Ideen ???

Dank

Antwort

13

So heraus habe ich es endlich, ein bisschen ... Es war nicht psapi.lib finden

In Ausbau-> Linker-> Zusätzliche Abhängigkeiten statt nur zu sagen psapi.lib ich vollständigen Pfad zu ihm gab und es funktionierte ... nicht wirklich sicher, warum es fehlgeschlagen ist, es vorher zu finden, aber gut ...

+6

Wenn Sie msvc verwenden, können Sie '#pragma comment (lib," psapi.lib ")' verwenden, um das aus der Quelle hinzuzufügen Code –

+0

warte was w krank dies [#pragma Kommentar (lib, "psapi.lib")] tun ??? – grobartn

1

Das ist sehr weit hergeholt (und ich glaube nicht wirklich, das ist es), aber vielleicht die Header nicht richtig mit extern „C“ für C++ Kompilation bewacht? Enthalten Sie Systemheader oder deklarieren Sie die Funktionen selbst?

+0

Nö :(sie sind alle extern mit und alles .... – grobartn

+0

Haben Sie versucht, den vollständigen Wiederaufbau? Ich bemerkte, dass VC++ von Zeit zu Zeit "verwirrt" (es vermasselt wahrscheinlich Programm-Datenbank) und vollständige Wiederherstellung in der Regel geholfen. Ich würde alle löschen * .obj, * .exe und * .pdb vorher, nur für den Fall ... – Tomek

+0

tat das zu oft nichts .... – grobartn

1

Können Sie Ihre Compilier- und Link-Befehlszeilen und alle # defs in Ihrem Code posten?

Tritt dies auf, wenn Sie ein einfaches Projekt von Grund auf neu erstellen, das nur eine dieser Methoden aufruft?

1

Für den Rekord: Das gleiche Problem, andere Lösung; ich für das Verzeichnis einen Eintrag hatte

psapi 

in der Liste hinzugefügt von

Linker/General/Additional Library Directory 

Dies ist in der Nutzung der alten VS2005 Plattform sdk psapi.lib führte (es keine x64-Version nur x86 hatte,). Nach dem Entfernen des Eintrags wird nun die richtige lib von der installierten WinSDK x64/psapi.lib verwendet. Also halten Sie Ausschau nach Mischungen/Bestellung von alten & neuen SDKs! Offensichtlich funktioniert der vollständige Pfad auch, aber möglicherweise ein Problem, wenn Sie das Projekt auf mehreren Computern verwenden.

0

In meinem Fall (Migration von VS2008 zu VS2012), gelöst Problem nach dem Hinzufügen psapi.lib in Linker-> Input-> Zusätzliche Abhängigkeiten in VS 2012.

Verwandte Themen