Ich verwende tinyxml Bibliothek zum Parsen von XML-Dateien in meinem Projekt. Wenn ich versuche, x64-Plattformen anzusprechen, bekomme ich LINKER-Fehler und hier ist einer von ihnen:
Fehler 4 Fehler LNK2001: nicht aufgelöstes externes Symbol "privat: statisch Struktur TiXmlString :: Rep TiXmlString :: nullrep_ " (? nullrep_ @ TiXmlString @@ 0Eurep @ 1 @ A) ClassThatUsesTinyXML.obj
Update : Ich dachte mir, dass die x64-Version von tinyxml nicht installiert war, aber als ich versuchte, die Bibliothek für x64-Plattformen zu erstellen, kam dieser Fehler:
%Vor% Anstatt tinyxml für x64 platforms
zu erstellen und dann tinyxml.h
und tinystr.h
zum Projekt hinzuzufügen, habe ich soeben alle Bibliotheksdateien einschließlich der .cpp
-Dateien hinzugefügt und kann nun x64-Plattformen als Ziel verwenden, die Bibliothek ist in der Tat, gebaut werden, wenn ich das ganze Projekt baue.
Es sieht nicht so aus, als ob tinyxml Shared Library-Builds direkt unterstützt.
Hier sind die Schritte, die ich ausgeführt habe, um eine DLL aus den tinyxml 2.6.2-Quellen zu erstellen:
tinyxml.sln
in MS Visual Studio Express 2012 für Windows Desktop. Wählen Sie, um die alten Projektdateien nach Aufforderung in das neue Format zu konvertieren. Innerhalb von tinyxml_2_6_2\tinyxml\x64\Release
finden Sie tinyxml.dll
, aber keine Importbibliothek ( tinyxml.lib
). Dies liegt daran, dass keine Symbole exportiert werden. Siehe Wie geht es? Erstellen Sie eine Importbibliothek (.lib) UND eine DLL in Visual C ++?
Wenn Sie die gemeinsame Bibliotheksroute verwenden möchten, müssen Sie die gewünschten Symbole über den MSVC-spezifischen __declspec(dllexport)
-Modifikator exportieren. Siehe Symbolsichtbarkeit in Windows .
Die Fehler treten auf, wenn Sie TIXML_USE_STL für die Kompilierung der Bibliothek definieren, nicht jedoch für die Quellen, die mit der Bibliothek verknüpft sind. Das Endergebnis ist, dass die Bibliothek mit anderem Code aus den Quellen kompiliert wird, die die Bibliothek verwenden.