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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top