12

因此,如果您已经有一个二进制文件,您可以在 OSX 上使用“install_name_tool”添加一个 rpath,如下所示:

install_name_tool -add_rpath @executable_path/blah

当您构建应用程序包时,xcode 会自动执行此操作。

我知道在 cmake 中您可以使用它来设置共享库的 install_name:

set_target_properties(nshared PROPERTIES BUILD_WITH_INSTALL_RPATH 1 INSTALL_NAME_DIR "@rpath")

我的问题是,将 rpath 添加到二进制文件相当于什么?

(对于“你为什么要这样做?”在你们中间,去看看你 Applications/ 文件夹中任何应用程序上的 otool -l ,你会看到很多应用程序的条目如下:

Load command 15
          cmd LC_RPATH
      cmdsize 36
         path @executable_path/../../Frameworks/

这是标准做法。我只是想在cmake中做到这一点)

4

1 回答 1

20

您可以使用POST_BUILD 命令LC_RPATH加载命令添加到构建的可执行文件中:

add_custom_command(TARGET executable 
    POST_BUILD COMMAND 
    ${CMAKE_INSTALL_NAME_TOOL} -add_rpath "@executable_path/../../Frameworks/"
    $<TARGET_FILE:executable>)

该变量包含Darwin 下可执行文件CMAKE_INSTALL_NAME_TOOL的路径。install_name_tool

于 2012-12-01T19:26:50.600 回答