Nicht aufgelöstes externes symbol Fehler, die nur in 64-bit-Modus und nicht im 32-bit-build
Ich habe ein VC++ - code (erstellt mit VS2008), macht die Verwendung von statischen Bibliotheken (*.lib-Dateien statisch gelinkt, während der compile-Zeit).
Verständnis zu erleichtern lassen Sie ' s siehe meine EXE-code als "AAA.EXE" & finden Sie die lib-Dateien als "A. lib", b.lib etc...
Sowohl die AAA.EXE code und statische code-Bibliotheken werden erstellt, indem die VS2008.
Ich sehen, dass meine "AAA.EXE" ist in Ordnung, die in 32-bit-version und zeigt die unten linker-Fehler beim AAA.EXE gebaut wird in 64-bit-Modus.
Habe ich natürlich wieder aufgebaut, die statische Bibliotheken sind in der 64-bit-Modus gestellt und die lib-Pfad in meinem AAA.EXE so aus: "Projekt-Konfiguration-Eigenschaften entsprechend AAA.EXE -> Linker -> allgemein/Eingabe".
Diese linker-Fehler ist wirklich stört mich die form eine lange Zeit. Jede Hilfe wird sehr geschätzt.
Logger.lib(Loggerr.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: __thiscall CWTTLogger::CWTTLogger(void)" (__imp_??0CWTTLogger@@QAE@XZ)
1>Logger.lib(Logger.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: virtual __thiscall CWTTLogger::~CWTTLogger(void)" (__imp_??1CWTTLogger@@UAE@XZ)
1>Logger.lib(Logger.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: long __thiscall CWTTLogger::FunctionA(unsigned short *,long *)" (__imp_?FunctionA@CWTTLogger@@QAEJPAGPAJ@Z)
1>Logger.lib(Logger.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: long __thiscall CWTTLogger::FunctionB(unsigned short *,long)" (__imp_?FunctionB@CWTTLogger@@QAEJPAGJ@Z)
1>Logger.lib(Logger.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: long __thiscall CWTTLogger::FunctionC(unsigned short *,unsigned long,unsigned short *,long)" (__imp_?FunctionC@CWTTLogger@@QAEJPAGK0J@Z)
1>Logger.lib(Logger.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: long __cdecl CWTTLogger::FunctionD(unsigned long,long,...)" (__imp_?FunctionD@CWTTLogger@@QAAJKJZZ)
1>Logger.lib(Logger.obj) : error LNK2001: unresolved external symbol "__declspec(dllimport) public: long __thiscall CWTTLogger::FunctionE(unsigned short *,long)" (__imp_?FunctionE@CWTTLogger@@QAEJPAGJ@Z)
1>C:\Users\User1\Documents\XYZ\Code\64bit\aaa.exe: fatal error LNK1120: 7 unresolved externals
Hinzufügen ::
Ich habe getan, 2 änderungen in den Einstellungen machen, damit mein AAA.exe code 64-bit von 32-bit::
1)
2)
Natürlich ist der code kompatibel ist (sowohl 32-bit & 64-bit. Sind diese 2 änderungen der Einstellungen in VC2008 komplette für die Herstellung der 32-bit-AAA.exe code 64-bit-build?
Durch den Blick auf andere stackoverflow-link, den ich sehen es ist eine weitere settoing in "Projekt-Konfiguration, Eigenschaften -> Linker-> Erweitert-> Ziel-Computer ist standardmäßig auf "nicht festgelegt"
und wenn ich make-target machine == "MACHINEx64", ich bekomme eine andere Art von Fehler, die ich immer war, früher ::
"fatal error LNK1112: Modul-Maschinen-Typ 'X86' Konflikte mit dem Ziel
Maschine Typ 'x64'"
Ich bin wirklich nicht mit einer Klarheit auf, wenn ich die Einstellung der "Ziel-machine" - Feld in der linker-option als "Nicht Festgelegt" oder "MACHINEx64"?
Wenn es ein "JA", ich brauche, um herauszufinden, wie das problem zu lösen.
CWTTLogger
Klasse, ist es etwas aus einer Ihrer Bibliotheken?Es können mehrere Dinge sein, konnte das problem aber noch lange kein Grund ist sichtbar in dem, was Sie gezeigt haben. Die meisten offensichtliche Frage ist: Sie sind der gewissen, die Sie neu erstellen die lib in 64-bit-und-Verknüpfung gegen Sie und nicht 32-bit-version von Unfall?
Ich habe Hinzugefügt, weitere details auf, was alle Einstellungen habe ich für den Wechsel des 32-bit-version auf eine 64-bit-version AAA.EXE. Ja, CWTTLOgger ist meine Klasse Namen, die in den Bibliotheken (.lib) habe ich definiert.
Möchte klarstellen, dass meine statische Bibliotheken (.lib) vorhanden sind, eine andere Lösung und ich habe die änderungen alle auf x64. In der snapshot-ich habe gezeigt, jedes Projekt ist eine indivisual EXE-Datei und haben keine Beziehung/Abhängigkeit von einem anderen Projekt auf die gleiche Lösung. Alle meine Bibliotheken A. lib,B. lib etc... sind alle Anwesenden in eine andere Lösung. –
InformationsquelleAutor codeLover | 2013-08-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vom Aussehen, Sie ändern nur die Hälfte der Projekte zu
x64
und überlassen Sie den restWin32
. Da Sie nicht zeigen Sie Ihre Projekt-Abhängigkeiten, die schwer zu erraten, ob das ein problem ist oder nicht ... in jedem Fall für die Kompilierung erfolgreich zu sein müssen Sie schalten Sie alle abhängigen Projekte (libs) zu x64!Sind Sie auch mit einem Plattform-spezifischen output-Verzeichnis? z.B. "$(SolutionDir)$(Configuration)\$(Platform)\"? Ansonsten die bekommen könnte gemischt aus verschiedenen builds
Ja, ich bin mit Plattform-spezifischen output-Verzeichnis. Ich bin mir nicht sicher, wie bekomme ich diesen Fehler loszuwerden, das beschäftigt mich schon sehr lange.
InformationsquelleAutor codeling
Dass schwerwiegender Fehler LNK1112 zeigt an, dass Sie in der Tat die Verknüpfung etwas im 32-bit Modus beim erstellen einer 64-bit-Programm.
Bild 2) zeigt nur einige aber nicht alle Projekte im 64-bit Modus. Das klingt nach ärger!
Vielleicht liegt das problem in deinem LIB-Verzeichnis?
In der Regel meine Projekte (VS2010 hier) unterscheiden sich in:
Punkte, die zu
lib32
oderlib64
directory-je nach Ziel-Architektur.Aber Sie haben auch 32-bit-Bibliotheken irgendwo Recht? Sie sind wahrscheinlich unter dem gleichen Titel, aber unterschiedlichem Pfad (ich sehe " - Logger.lib" - name in der Fehlermeldung, nicht z.B. "Logger32.lib" oder "Logger64.lib"). Mein Punkt ist - sind Sie sicher, dass die lib-Pfad für 64-bit korrekt gesetzt ist?
InformationsquelleAutor CygnusX1
Alter Thread, ich weiß, aber ich fand, dass ich musste hinzufügen "Explicit" - Exporte in die DEF-Datei, um es zu arbeiten. Muss sein, dass die 32-bit wurde implizit hinzufügen, aber die 64 war es nicht. Hoffe, dies hilft jemand 🙂
InformationsquelleAutor JMartin
Ich denke, dass ich herausgefunden, was das problem war.
AAA.EXE war mit Logger.lib statische Bibliothek, die wiederum den Aufruf der Funktionen in WTTLog.DLL. Und diese Microsoft-DLL "WTTLog.DLL" ist ein 32-bit-DLL.
Das ist der Grund, es war nicht für mich arbeiten in 64-bit AAA.EXE.
Also ich fand die Antwort auf die Frage, die ich aufgeworfen, die in diesem thread von mir.e wie link 64-bit-Bibliotheken in 64-bit-Anwendung. Aber trotzdem lässt mich das mit einer Frage,
"Wo finde ich die 64-bit-version WTTLog.lib und "wttlogger.h" für WTTLog.DLL.
Für diese habe ich einen neuen thread, da das problem ist jetzt anders.
Wie man die WTTLog.lib und wttlogger.h header-Datei für die 64-bit-version von WTTLog.DLL
InformationsquelleAutor codeLover