xerces-c 2.8: Fehler beim Laden von Shared Libraries
Frage
Ich versuche, ein Programm läuft auf einem HP UX-Server auf einem Red Hat Linux zu kompilieren.
Es verwendet xerces-c-Bibliothek XML-Dateien zu analysieren. Compilation ist in Ordnung, aber wenn ich versuche, es zu laufen, erhalte ich die folgende Meldung
./ a.out: Fehler beim Laden geteilt Bibliotheken: libxerces-c.so.28: nicht öffnen Shared Object-Datei: Datei oder das Verzeichnis
Ich schrieb ein sehr einfaches Programm, um zu versuchen und zu verstehen, was los ist:
#include <xercesc/util/PlatformUtils.hpp>
#include <xercesc/util/TransService.hpp>
#include <xercesc/parsers/SAXParser.hpp>
#include <xercesc/util/OutOfMemoryException.hpp>
int main(int argc, char* argv[])
{
return 0;
}
Und es wie folgt zusammengestellt:
g ++ test.cpp -L./xml/xerces-c_2_8_0/lib -lxerces-c -I./xml/xerces-c_2_8_0/include
Überraschenderweise ist die Datei tatsächlich da:
lib]$ ls
libxerces-c.a libxerces-c.so.28 libxerces-depdom.a libxerces-depdom.so.28
libxerces-c.so libxerces-c.so.28.0 libxerces-depdom.so libxerces-depdom.so.28.0
Alle Gedanken? Ich glaube, ich bin fehlt etwas, aber nicht wissen, was.
Vielen Dank im Voraus.
Lösung
laufen ldd a.out
und sehen, ob der Linker die richtige .so-Datei lösen
Export LD_LIBRARY_PATH
den aktuellen Ordner enthalten (in der gleichen Weise wie die PATH-Variable) und überprüfen LDD wieder
Andere Tipps
die gute Art und Weise zu tun, was Sie wollen, ist die folgende:
g++ test.cpp -Xlinker -R ./xml/xerces-c_2_8_0/lib -lxerces-c -I./xml/xerces-c_2_8_0/include
oder
g++ test.cpp -Wl,-rpath ./xml/xerces-c_2_8_0/lib -lxerces-c -I./xml/xerces-c_2_8_0/include
oder Wl-Vernetzer Optionen können Sie bestimmte Verknüpfungsoptionen verwenden, die Sie nicht brauchen Modifiy LD_LIBRARY_PATH
Sie müssen die Laufzeit-C-Bibliothek sagen, wo die verschiedenen Symbole zu finden, die statisch in Ihrem Code und Arent in den usualy / lib und / usr / lib Orten zusammengestellt Arent.
Sie dies tun, indem Sie den Pfad zu Ihrer gemeinsam genutzten Bibliothek zu LD_LIBRARY_PATH hinzufügen. In diesem Fall wird das sein, was Sie für das -L Argument für die Compiler worden setzen.