Die Verknüpfung ist aufgebockt .. was ist -rpath? Mac OS X
-
27-09-2019 - |
Frage
Also, ich baue ein Projekt, und es nutzt Funktionen aus einer kompilierten Bibliothek (.dylib oder .so). Ich habe die Header und die Bibliotheksdateien (das ist alles Teil QtRoot, btw) an geeigneten Stellen, aber wenn ich versuche, mein Projekt in Xcode zu bauen, ich einen Debugger Fehler:
dyld: Bibliothek nicht geladen: @ rpath / libRIO.so Referenzierten aus: / Users / paulthompson / Dokumente / Programmierung / Build-Produkte / Debug / MacHeliosSim.app / Contents / MacOS / MacHeliosSim Grund: Bild nicht gefunden sharedlibrary gelten Last-Regeln alle Datenformatierern vorübergehend nicht verfügbar ist, wird wieder versuchen, nach einem ‚weiter‘. (Kann zum gegenwärtigen Zeitpunkt nicht in die Lade nennen, es gesperrt ist.)
Nun, sich das Programm, das ganz gut läuft gebaut wird, wenn ich es aus dem Finder zu öffnen, aber wenn ich versuche, es von Xcode zu laufen, barfs es mich an. Was ist die rpath Sache, und warum kann die Bibliotheken nicht der Debugger finden, auch wenn Xcode selbst weiß, wo sie sind, und anscheinend das Programm, wenn aus dem Finder lief sie finden?
Lösung
http://en.wikipedia.org/wiki/Rpath_ (Verknüpfung)
Es ist ein Weg in dem binären gespeichert gemeinsame Libs zu finden. Wenn Sie die App aus dem Finder starten, ist es wahrscheinlich ein App-Bundle? Wenn APP Bündel erzeugt werden, werden gemeinsam benutzten Bibliotheken in das app Bündel kopiert und die Pfade zu den gebündelten Bibliotheken dann relativ geworden. (@Executable_path /../ Frameworks / foobar). Wie haben Sie die Version, dass die Arbeiten von Finder?
Tritt der Fehler oben auf Link-Zeit oder wenn die Anwendung von Xcode zu beginnen? (Im letzteren Fall versuchen, mit DYLD_LIBRARY_PATH)
Auch die .so-Erweiterung für Librio statt .dylib etwas verdächtig aussieht.
Andere Tipps
Fügen Sie die rpath in der Verknüpfungsphase, wie in diesem (in qt Konzept) Beispiel:
LIBS + = -L / usr / local / root / lib -lGui -lCore -lCint -lRIO -lNet -lHist -lGraf -lGraf3d -lGpad -lTree -lRint -lPostscript -lMatrix -lPhysics -lMathCore -lThread -lpthread -Wl, -rpath, / usr / local / root / lib -Im -ldl