macos mach-o otool install-name-tool

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:

  1. @executable_path : relativo al ejecutable principal
  2. @loader_path : relativo al binario de referencia
  3. @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