winebottler winebottle mac keygen juegos for ejecutar descargar app macos gcc linker shared-libraries dyld

macos - winebottle - ¿Cómo establecer la ruta del tiempo de ejecución(-ruta) de un archivo ejecutable con gcc bajo Mac OSX?



winebottler (1)

Quiero configurar 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 las bibliotecas compartidas en ubicaciones no estándar las encuentre el enlazador dinámico al inicio del programa.

En Linux esto es posible con -Xlinker -rpath -Xlinker /path/to (o usando -Wl,-rpath,/path/to ) y bajo Solaris puede agregar -R/path/to a la línea de comandos del compilador.

Encontré información de que Mac OS X gcc tiene soporte para Rpath desde 10.5, es decir desde ~ 2008.

Traté de hacerlo funcionar con un ejemplo mínimo, 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

Por lo tanto, la pregunta: ¿Cómo configuro la ruta del tiempo de ejecución para el enlazador en Mac OSX?

Por cierto, establecer DYLD_LIBRARY_PATH funciona, pero no quiero usar este truco.

Editar: En cuanto a 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 solo imprime los nombres de la biblioteca (y probablemente las ubicaciones en el momento del enlace) con los que el ejecutable estuvo enlazado y sin información de ruta de tiempo de ejecución.


Encontrado por experimentación, e inspeccionando las líneas de comando generadas por Xcode para un proyecto de demostración de ruta de acceso de Dave Driblin :

otool -L muestra el nombre de instalación de las bibliotecas vinculadas. Para que @rpath funcione, debe cambiar el nombre de instalación de la biblioteca:

$ gcc -dynamiclib blah.o -install_name @rpath/t/libblah.dylib -o libblah.dylib $ mkdir t ; mv libblah.dylib t/ $ gcc main.c -lblah -L`pwd`/t -Xlinker -rpath -Xlinker `pwd`