How to properly set run paths, search paths, and install names?

前端 未结 2 1119
不思量自难忘°
不思量自难忘° 2020-12-25 15:36

I have a collection of projects that I\'m compiling as dynamic libraries. Each of these .dylibs depend on other various .dylibs that I would like to place in various other d

2条回答
  •  借酒劲吻你
    2020-12-25 15:54

    install_name_tool is very useful for setting the names and paths. Its especially useful if the program runs its self-tests in the build directory, and then things change during a make install. In this case, you can use install_name_tool without the need for a separate build.

    install_name_tool is also useful because Apple's LD does not honor rpath linker options like Linux/GCC does. That is, you need to use a different set of commands to set them.

    Here's the man page for it. Its included in its entirety because it discusses other options, like -headerpad_max_install_names.

    INSTALL_NAME_TOOL(1)                                      INSTALL_NAME_TOOL(1)
    
    NAME
           install_name_tool - change dynamic shared library install names
    
    SYNOPSIS
           install_name_tool  [-change  old  new  ]  ...  [-rpath  old  new  ] ...
           [-add_rpath new ] ... [-delete_rpath new ] ... [-id name] file
    
    DESCRIPTION
           Install_name_tool changes the dynamic shared library install names  and
           or  adds,  changes  or  deletes the rpaths recorded in a Mach-O binary.
           For this tool to work when the install names or rpaths are  larger  the
           binary  should  be  built  with  the ld(1) -headerpad_max_install_names
           option.
    
           -change old new
                  Changes the dependent shared library install name old to new  in
                  the specified Mach-O binary.  More than one of these options can
                  be specified.  If the Mach-O binary does  not  contain  the  old
                  install  name  in  a  specified  -change  option  the  option is
                  ignored.
    
           -id name
                  Changes the shared library  identification  name  of  a  dynamic
                  shared  library  to name.  If the Mach-O binary is not a dynamic
                  shared library and the -id option is specified it is ignored.
    
           -rpath old new
                  Changes the rpath path name old to new in the  specified  Mach-O
                  binary.   More  than  one of these options can be specified.  If
                  the Mach-O binary does not contain the old rpath path name in  a
                  specified -rpath it is an error.
    
           -add_rpath new
                  Adds  the  rpath  path  name new in the specified Mach-O binary.
                  More than one of these options can be specified.  If the  Mach-O
                  binary  already  contains  the  new rpath path name specified in
                  -add_rpath it is an error.
    
           -delete_rpath old
                  deletes the rpath path name old in the specified Mach-O  binary.
                  More  than one of these options can be specified.  If the Mach-O
                  binary does not contains the old rpath path  name  specified  in
                  -delete_rpath it is an error.
    
    SEE ALSO
           ld(1)
    

提交回复
热议问题