Quiero cambiar el rpath de un ejecutable usando install_name_tool
, pero no puedo entender qué es el rpath en este momento. install_name_tool
requiere que tanto el antiguo como el nuevo rpath se den en la línea de comandos. ¿Qué comando puedo usar para imprimir el rpath de un ejecutable bajo OSX?Imprimir rpath de ejecutable en OSX
Respuesta
En primer lugar, entiendo que un archivo ejecutable no contiene una sola entrada rpath
, sino una matriz de una o más entradas.
En segundo lugar, puede usar otool
para listar las entradas de una imagen rpath
. Usando otool -l
, obtendrá una salida como la siguiente, al final de las cuales son las entradas rpath
:
Load command 34
cmd LC_LOAD_DYLIB
cmdsize 88
name /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (offset 24)
time stamp 2 Wed Dec 31 19:00:02 1969
current version 1038.32.0
compatibility version 45.0.0
Load command 35
cmd LC_RPATH
cmdsize 40
path @loader_path/../Frameworks (offset 12)
buscar la LC_RPATH
comandos y tenga en cuenta la vía de acceso en la entrada path
.
Actualmente estoy escribiendo varios guiones Bash-3 para el procesamiento de dyld y éste responde a la pregunta, así que publicarlo como referencia:
#! /bin/bash
# ######################################################################### #
if [ ${#} -eq 0 ]
then
echo "
Usage: ${0##*/} FILE...
List rpaths in FILEs
"
exit 0
fi
# ######################################################################### #
shopt -s extglob
# ######################################################################### #
for file in "${@}"
do
if [ ! -r "${file}" ]
then
echo "${file}: no such file" 1>&2
continue
fi
if ! [[ "$(/usr/bin/file "${file}")" =~ ^${file}:\ *Mach-O\ .*$ ]]
then
echo "${file}: is not an object file" 1>&2
continue
fi
if [ ${#} -gt 1 ]
then
echo "${file}:"
fi
IFS_save="${IFS}"
IFS=$'\n'
_next_path_is_rpath=
while read line
do
case "${line}" in
*(\)cmd\ LC_RPATH)
_next_path_is_rpath=yes
;;
*(\)path\ *\ \(offset\ +([0-9])\))
if [ -z "${_next_path_is_rpath}" ]
then
continue
fi
line="${line#* path }"
line="${line% (offset *}"
if [ ${#} -gt 1 ]
then
line=$'\t'"${line}"
fi
echo "${line}"
_next_path_is_rpath=
;;
esac
done < <(/usr/bin/otool -l "${file}")
IFS="${IFS_save}"
done
# ######################################################################### #
'Espero que ayuda ;-)
NB : ¿Alguien sabe algunos trucos de Bash-3 que pueden ser útiles para este guión?
sólo tiene que utilizar comandos otool
otool -L <my executable>
Se imprime el campo rpath. No hay necesidad de ningún script largo.
Esto imprimirá las rutas de acceso de las bibliotecas compartidas utilizadas. Esas rutas pueden usar @rpath sin embargo 'otool -L' no no, en las bibliotecas que probé, incluyen la entrada LC_RPATH propia de la biblioteca – Baggers
Por lo que puedo decir, la primera ruta en otool -L es la ruta, igual que la que imprime otool -D –
Descubrí que puedo imprimir el nombre de instalación de una biblioteca compartida en osx usando otool -D.
Por otra parte, puedo establecer el nombre de la instalación directamente sin hacer referencia al nombre antiguo instalar pasando el -id bandera para install_name_tool: install_name_tool -id "@ rpath/mi/ruta mibiblioteca
- 1. Cómo codificar la ubicación ejecutable en un rpath de Linux?
- 2. ¿Cómo establecer la ruta del tiempo de ejecución (-rpath) de un archivo ejecutable con gcc en Mac OSX?
- 3. ¿Convertir .jar a un ejecutable OSX?
- 4. No entiendo -Wl, -rpath -Wl,
- 5. usa RPATH pero no RUNPATH?
- 6. Cómo compilar OpenSSL con rpath relativa
- 7. Impresión de Firemonkey en Mac OSX
- 8. /usr/bin/ld: advertencia: abc.so, necesario por xyz.so no encontrado (intente con -rpath o -rpath-link) "
- 9. ¿Hay un Windows/MSVC equivalente al indicador del enlazador -rpath?
- 10. rpath = $ ORIGIN no tiene el efecto deseado?
- 11. Cómo forzar a Boost a usar rpath?
- 12. ¿Hay alguna manera de inspeccionar el rpath actual en Linux?
- 13. Convertir ejecutable .NET en ejecutable nativo
- 14. Cómo imprimir los contenidos de un archivo de texto OSX desde la terminal?
- 15. No se pueden imprimir los números de coma flotante de la biblioteca compartida ejecutable
- 16. ¿Cómo se especifica RPATH en un archivo MAKE?
- 17. Cómo obtener RPATH con $ ORIGIN para trabajar en Code :: Blocks GCC?
- 18. Ruta de biblioteca compartida como directorio ejecutable
- 19. versiones en OSX 10.7
- 20. internacionalización de Django (en OSX)
- 21. Uso de make en OSX
- 22. Scripts de terminal en OSX
- 23. Actualizar GCC en OSX
- 24. Configurando PHPUnit en OSX
- 25. falta libgeos_c.so en OSX
- 26. QT: Cambia el nombre del ejecutable incorporado
- 27. Guardar datos en ejecutable
- 28. Posibilidad de cargar/ejecutar archivos ELF en OSX
- 29. Control de ventanas OSX
- 30. equivalente OSX de ShellExecute?
¿Cuál es la' @ loader_path'? – nn0p
@ nn0p Encontré [este artículo] (https://wincent.com/wiki/@executable_path,[email protected][email protected]) útil para comprender loader_path. –
No pude ver una LC_RPATH en mi otool - l salida, pero veo el nombre de la instalación debajo del campo de nombre que sigue a la entrada del cmd LC_ID_DYLIB –