Why is install_name_tool and otool necessary for Mach-O libraries in Mac Os X?

Apple has several ways of locating shared libraries:

  1. @executable_path : relative to the main executable
  2. @loader_path : relative to the referring binary
  3. @rpath : relative to any of a list of paths.

@rpath is the most recent addition, introduced in OS X 10.5.

If for instance you want to have your executable in Contents/MacOS and libraries in Contents/Libraries you could do the following:

install_name_tool -id @rpath/Libraries/lib_this.dylib   builddir/lib_this.dylib

and in the top-level executable set rpath with:

install_name_tool -add_rpath @loader_path/..  myexecutable

and:

install_name_tool -change builddir/lib_this.dylib @rpath/Libraries/lib_this.dylib myexecutable

Note: that the first path after -change must match exactly what is currently in the binary.

If you get lost otool -l -v myexecutable will tell you what load commands exactly are currently in the executable.

See man dyld and man install_name_tool for more information.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)