macos - ¿Por qué es install_name_tool y otool necesarios para las bibliotecas Mach-O en Mac Os X?
install-name-tool (2)
Apple tiene varias formas de localizar bibliotecas compartidas:
-
@executable_path
: relativo al ejecutable principal -
@loader_path
: relativo al binario de referencia -
@rpath
: relativo a cualquiera de una lista de rutas.
@rpath
es la adición más reciente, presentada en OS X 10.5.
Si, por ejemplo, desea tener su ejecutable en Contents/MacOS
y bibliotecas en Contents/Libraries
, podría hacer lo siguiente:
install_name_tool -id @rpath/Libraries/lib_this.dylib builddir/lib_this.dylib
y en el ejecutable de nivel superior establece rpath
con:
install_name_tool -add_rpath @loader_path/.. myexecutable
y:
install_name_tool -change builddir/lib_this.dylib @rpath/Libraries/lib_this.dylib myexecutable
Nota: que la primera ruta después del -change
debe coincidir exactamente con lo que está actualmente en el binario.
Si se pierde, otool -l -v myexecutable
le dirá qué comandos de carga están actualmente en el ejecutable.
Ver man dyld
y man install_name_tool
para más información.
Estoy desarrollando una aplicación Cocoa con la última versión de Xcode 4, quiero vincular bibliotecas dinámicas a mi proyecto ( dylibs
).
Leí en alguna parte que agregar las bibliotecas en mi proyecto no era suficiente ya que tengo que ejecutar install_name_tool
y otool
para hacer que mi proyecto use las bibliotecas que se incluyeron en mi proyecto.
He leído las páginas del manual para install_name_tool
, pero no entiendo POR QUÉ tengo que hacer esto.
¿Cómo funcionan las bibliotecas? Especialmente interesado en la parte donde la aplicación y las bibliotecas tienen rutas que apuntan a lugares específicos en mi máquina, como /usr/local/lib/mylibrary.dylib
cuando se ejecuta otool -L
También hay una herramienta de GUI llamada MacDependency que expondrá todas las bibliotecas dependientes ( https://github.com/kwin/macdependency/ ).