2015-05-21 14 views
5

Die rpath einer ausführbaren gibt ein oder mehrere Verzeichnisse, wobei für gemeinsam genutzte Objekte zur Laufzeit suchen.rpath einer gemeinsamen Objektdatei

Meine Frage ist - gemeinsam genutzte Objektdateien selbst haben auch statisch kompiliert rpath s?

Vor kurzem erhielt ich einen Laufzeitfehler, wenn sie mit einem gemeinsamen Objekt verknüpfen:

./example: /opt/swt/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by ./mylib.so) 

Dieser Fehler zeigt mir, dass die tatsächlich Bibliothek selbst - mylib.so, hat eine statisch rpath zusammengestellt.

Mein Verständnis war, dass rpath nur ausführbare Dateien angewendet wird, nicht gemeinsam genutzte Objekte. Also gilt rpathauch gelten für gemeinsame Objekte?

Antwort

3

tun Shared Object-Dateien selbst haben auch rpaths-statisch kompilierte

Sie kann (oder auch nicht), je nachdem, ob sie mit -Wl,-rpath=... Option verbunden waren.

Dieser Fehler zeigt mir, dass die tatsächlich Bibliothek selbst - mylib.so, hat ein statisch rpath zusammengestellt.

Die Fehlermeldung ist nicht sagen, dass überhaupt. Woher hast du diese Idee?

Wenn Sie wissen wollen, ob mylib.so hat DT_RPATH oder nicht, dies tun:

readelf -d mylib.so | grep 'R.*PATH' # could also have RUNPATH 

Mein Verständnis war, dass rpath nur ausführbare Dateien angewendet wird, nicht gemeinsam genutzte Objekte. Also gilt rpath auch für gemeinsame Objekte?

Ihr Verständnis falsch ist, und RPATH (und RUNPATH) arbeitet für gemeinsam genutzte Objekte genauso gut.