2016-10-16 7 views
0

Kurz gesagt: auf Visual C++ 2015 bekomme ich einen Linker-Fehler über das Fehlen von Symbolen, die in der .lib-Datei, gegen die ich verlinke.Visual C++ - Linker beschwert sich über das Fehlen eines Symbols, das nicht abwesend ist


In lange: Während einige Programm von der Kommandozeile mit cl.exe Kompilieren-und-Vorliebe ich folgendes als erste von vielen Fehlern erhalten:

main.obj : error LNK2001: unresolved external symbol "protected: static struct wxEventTable const wxApp::sm_eventTable" ([email protected]@@[email protected]@B) 

AFAIK, diese lange Schlange sagt dass meine main.obj sich auf eine Funktion bezieht, der ein Symbol? sm_eventTable @ wxApp @@ 1UwxEventTable @@ B zugeordnet ist, aber dass der Linker dieses Symbol nicht in der (langen) Liste der Bibliotheken finden konnte, die ich in der Befehlszeile angegeben habe .

Ich kompiliere in/MD-Modus. Ich weiß nicht, ob es hilft, tut weh oder hat hier keine Bedeutung.

Eine der Dateien mit I-Link ist wxmsw31u_core.lib und tun

dumpbin/headers wxmsw31u_core.lib> here.txt

eine lange Datei gibt containting die folgende

Version  : 0 
    Machine  : 8664 (x64) 
    TimeDateStamp: 56D46194 Mon Feb 29 16:19:48 2016 
    SizeOfData : 00000045 
    DLL name  : wxmsw310u_core_vc140_x64.dll 
    Symbol name : [email protected]@@[email protected]@B (protected: static struct wxEventTable const wxApp::sm_eventTable) 
    Type   : data 
    Name type : name 
    Hint   : 14083 
    Name   : [email protected]@@[email protected]@B 

Aus Daraus schließe ich, dass wxmsw31u_core.lib eine "Import-Bibliothek" ist: Mit anderen Worten, das bedeutet, dass diese Bibliothek nicht den Code enthält, sondern nur auf die DLL-Datei wxmsw310u_core_vc140_x64.dll verweist, die den Code enthält. ?

Letztere wxmsw310u_core_vc140_x64.dll Datei in der Tat erwähnt sm_eventTable @ wxApp @@ 1UwxEventTable @@ B, wie ich überprüft:

dumpbin/exports wxmsw310u_core_vc140_x64.dll> here2.txt

gab

14084 3703 0057F008 [email protected]@@[email protected]@B = [email protected]@@[email protected]@B (protected: static struct wxEventTable const wxApp::sm_eventTable) 

Ich bemerke, dass die erste Zahl gleich dem Hinweis der vorherigen Kopfzeile plus eins ist. Ich nehme an, das ist normal?

Ich nahm mir die Zeit, um die DLL wie oben zu überprüfen, aber AFAIK, die DLL ist nicht in der Verknüpfung erforderlich (es ist erforderlich, wenn Sie die .exe, die produziert wird) aufrufen.

Alles in allem scheint es, dass alles da ist und es sollte verlinken, also bin ich ratlos, um festzustellen, was hier falsch ist.


bearbeiten

Ich löste teilweise das Problem, indem ich die Libary Kompilieren statt mit dem kompilierten binaires für Windows von wxWidgets zur Verfügung gestellt: Ich kann jetzt mein Programm kompilieren und alles ist gut.

Nun, nicht alle: die erste Frage bleibt. Ich hatte eine Situation, wo ich versuchte, ein Obj mit einer Lib zu verknüpfen, um eine exe zu erhalten, der Obj verweist auf ein Symbol, dessen Name in der lib wörtlich vorhanden ist, der Linker lädt obj und lib (bestätigt mit/VERBOSE), Der Linker weigert sich jedoch, das Symbol als "aufgelöst" zu betrachten. Warum?

Ich werde eine neue Frage erstellen, wo ich nach Erklärungen zu den zu lösenden Bedingungen frage.

Antwort

0

AFAIK, sagt diese lange Zeile, dass meine main.obj bezieht sich auf eine Funktion, auf die ein Symbol?

Ja, Linker ist nicht in der Lage [email protected]@@[email protected]@B auf dem Weg angegeben zu finden.

Überprüfen Sie, ob Sie richtig Setup Additional Library Path Parameter haben und dass die Zielplattform Ihrer Anwendung ist /Machine:X64

+0

Vielen Dank für Ihre Antwort. Meine Befehlszeile hat tatsächlich/MACHINE: X64 und/LIBPATH: "the-path-to-the-lib" (jedenfalls ohne die lib stoppt der Linker in einem früheren Schritt). – Arnaud

+0

@Arnaud '/ LIBPATH' sollte der Pfad zum Verzeichnis sein, nicht zur Bibliotheksdatei selbst. – Nikita

+0

Ja, das ist der korrekte Pfad – Arnaud

Verwandte Themen