2010-08-12 11 views
5

Also, ich baue ein Projekt, und es verwendet 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, bekomme ich einen Debugger Fehler:Verknüpfung ist aufgebockt .. Was ist -rpath? MacOS X

dyld: Library not loaded: @rpath/libRIO.so Referenced from: /Users/paulthompson/Documents/Programming/Build Products/Debug/MacHeliosSim.app/Contents/MacOS/MacHeliosSim Reason: image not found sharedlibrary apply-load-rules all Data Formatters temporarily unavailable, will re-try after a 'continue'. (Cannot call into the loader at present, it is locked.)

nun das Programm selbst das, was gebaut wird, wird gut funktionieren, wenn ich es vom Finder aus öffne, aber wenn ich versuche, es von Xcode zu starten, stößt es mich an. Was ist das für eine rpath-Sache, und warum kann der Debugger die Bibliotheken nicht finden, obwohl Xcode selbst weiß, wo sie sich befinden, und anscheinend das Programm, wenn es vom Finder ausgeführt wird, sie auch finden kann?

Antwort

3

http://en.wikipedia.org/wiki/Rpath_(linking)

Es ist ein Weg in der binären gespeichert gemeinsamen Libs zu finden. Wenn Sie die App im Finder starten, handelt es sich wahrscheinlich um ein App-Paket. Wenn App-Bundles erstellt werden, werden gemeinsam genutzte Bibliotheken in das App-Bundle kopiert und die Pfade zu den gebündelten Bibliotheken werden dann relativ. (@executable_path /../ Frameworks/foobar). Wie haben Sie die Version erstellt, die im Finder funktioniert?

Tritt der oben genannte Fehler zur Verbindungszeit oder beim Starten der Anwendung von xcode auf? (Im letzten Fall, versuchen Sie mit DYLD_LIBRARY_PATH)

Auch die .so Erweiterung für libRIO anstelle von .dylib sieht ein bisschen verdächtig.

+0

Sie verfehlten auf Ihrem Link, um die schließende Klammer. –

+0

Richtig, es ist ein .app-Bundle. Keine der gemeinsam genutzten Bibliotheken ist jedoch darin enthalten, es sei denn, sie werden in die eigentliche Binärdatei eingepackt. Es gibt nicht einmal ein Frameworks-Verzeichnis ... Wie auch immer, die .app wird erstellt, indem entweder 'Build' oder 'Build and Go' von Xcode ausgeführt wird. Der Fehler tritt während des Go-Teils von "Build & Go" auf oder wenn ich "Ausführen" innerhalb von Xcode wähle. Das .so, denke ich, ist eigentlich ein symbolischer Link zur .dylib. Einige der Bibliotheksdateien, auf die ich verlinke, sind tatsächliche .so-Dateien und andere sind .dylib. Ich denke, da sind sogar einige .a irgendwo drin, aber ich kann mich irren. Also, habe ich perhapse eine – TraxusIV

+0

Kopie Dateien Build-Phase fehlt? – TraxusIV

1

die rpath in der Verknüpfungsphase hinzufügen, wie dies in (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 -lm -ldl