Quiero establecer en Mac OSX la ruta de tiempo de ejecución de un archivo ejecutable (para el vinculador) en tiempo de compilación, de modo que el vinculador dinámico al inicio del programa encuentre las bibliotecas compartidas en ubicaciones no estándar.¿Cómo establecer la ruta del tiempo de ejecución (-rpath) de un archivo ejecutable con gcc en Mac OSX?
Bajo Linux esto es posible con -Xlinker -rpath -Xlinker /path/to
(o el uso de -Wl,-rpath,/path/to
) y bajo Solaris se puede añadir -R/path/to
a la línea de comandos del compilador.
He encontrado some information que Mac OS X gcc tiene -rpath apoyo desde 10,5, es decir, desde 2008. ~
Traté de conseguir que funcione con un mínimo ejemplo - sin éxito:
$ cat blah.c
int blah(int b)
{
return b+1;
}
Y :
$ cat main.c
#include <stdio.h>
int blah(int);
int main()
{
printf("%d\n", blah(22));
return 0;
}
Compilado de esta manera:
$ gcc -c blah.c
$ gcc -dynamiclib blah.o -o libblah.dylib
$ gcc main.c -lblah -L`pwd` -Xlinker -rpath -Xlinker `pwd`/t
Ahora la prueba:
$ 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
Así, la pregunta: ¿Cómo puedo configurar la ruta de tiempo de ejecución para el enlazador en Mac OS X?
Por cierto, ajuste DYLD_LIBRARY_PATH
funciona, pero no quiero usar este truco.
Editar: En cuanto 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)
Parece que otool -L
sólo imprime los nombres de biblioteca (y probables los lugares en tiempo de enlace) el ejecutable fue enlazado con y sin información de ruta en tiempo de ejecución.
no tengo un sistema OS X, pero buscar alrededor, [install_name_tool] (http://developer.apple.com/ library/mac/# documentation/Darwin/Reference/ManPages/man1/install_name_tool.1.html) puede agregar rpaths a su binario. No estoy seguro de por qué el suyo no funciona, ¿qué dice 'otool -L'? – ephemient