Ich möchte unter Mac OSX den Laufzeitpfad einer ausführbaren Datei (für den Linker) zur Kompilierungszeit festlegen, so dass gemeinsame Bibliotheken an nicht standardmäßigen Speicherorten vom dynamischen Linker beim Programmstart gefunden werden.Wie setze ich den Laufzeitpfad (-rpath) einer ausführbaren Datei mit gcc unter Mac OSX?
Unter Linux ist dies möglich mit -Xlinker -rpath -Xlinker /path/to
(oder -Wl,-rpath,/path/to
) und unter Solaris können Sie -R/path/to
der Compiler-Befehlszeile hinzufügen.
Ich fand some information, die Mac OS X gcc -rpath Unterstützung seit 10.5 hat, also seit ~ 2008
I zu erhalten versuchte es mit einem minimalen Beispiel arbeiten - ohne Erfolg:
$ cat blah.c
int blah(int b)
{
return b+1;
}
Und :
$ cat main.c
#include <stdio.h>
int blah(int);
int main()
{
printf("%d\n", blah(22));
return 0;
}
es so Zusammengestellt:
$ gcc -c blah.c
$ gcc -dynamiclib blah.o -o libblah.dylib
$ gcc main.c -lblah -L`pwd` -Xlinker -rpath -Xlinker `pwd`/t
Nun wird der Test:
$ mkdir t
$ mv libblah.dylib t
$ ./a.out
dyld: Library not loaded: libblah.dylib
Referenced from: /Users/max/test/./a.out
Reason: image not found
Trace/BPT trap
So ist die Frage: Wie ich den Laufzeitpfad für den Linker unter Mac OSX gesetzt?
Btw, Einstellung DYLD_LIBRARY_PATH
funktioniert - aber ich möchte diesen Hack nicht verwenden.
Edit: In Bezug auf otool -L
:
$ otool -L a.out
a.out:
libblah.dylib (compatibility version 0.0.0, current version 0.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.1)
Es scheint, dass otool -L
nur die Bibliotheksnamen druckt (und wahrscheinlich die Positionen zur Verknüpfungszeit) die ausführbaren Datei gegen und ohne Laufzeitpfadinformationen verlinkt.
Ich habe nicht ein OS X-System haben, aber die Suche um, [install_name_tool] (http://developer.apple.com/ library/mac/# documentation/Darwin/Referenz/ManPages/man1/install_name_tool.1.html) kann rpaths zu Ihrer Binärdatei hinzufügen. Nicht sicher, warum deine nicht funktioniert - was sagt "Otool-L"? – ephemient