Ich versuche, eine C++ - Bibliothek mit dem G ++ - Compiler zu generieren. Meine Bibliothek hat eine andere C-Bibliothek als Abhängigkeit und ich habe sie kompiliert, um die .so-Dateien zu erhalten.g ++ nicht finden .so Dateien
Ich habe die folgende Struktur:
src:
include/linux:
libcustom.a
libcustom.la
libcustom.so
libcustom.so.0
libcustom.so.0.0.0
Nun, wenn ich all .o Dateien meiner CPP-Klassen, und ich möchte, um die Bibliothek zu verknüpfen, führe ich den folgenden Befehl ein:
g++ -shared -L/usr/lib/R/lib -Wl,-Bsymbolic-functions -Wl,-z,relro -o mylibrary.so File1.o File2.o File3.o -L./include/linux -lc++ -lutil -lm -lcustom -Wl,-rpath='$ORIGIN/include/linux' -L/usr/lib/R/lib -lR
Aber es wirft mich den Fehler:
libcustom.so.0: cannot open shared object file: No such file or directory
ich Ausführung des Befehls aus dem src
Verzeichnis.
Ich weiß, es könnte behoben werden Bearbeitung der LD_LIBRARY_PATH
, aber die Idee, es ist jemand kann meine Bibliothek ohne die Notwendigkeit, etwas zu konfigurieren, so versuche ich das mit dem C++ 's -rpath-Flag zu tun.
Eine Idee, wie kann ich es beheben, oder der Grund für den Fehler?
Sie relativen Pfad verwenden '-Wl, -rpath =./Include/linux', die durch nicht erkannt der 'ld'-Loader unter Linux. Verwenden Sie stattdessen den absoluten Pfad. Für die korrekte Art der Verwendung des relativen Pfads, gehen Sie http://StackOverflow.com/A/4018559/6238076 – gdlmx