@rpath用于嵌入框架中的动态库

JWW*_*ker 9 macos rpath dynamic-linking

我有一个应用程序,称之为Animal.app.Contents/Frameworks比如,它的文件夹里面是一个框架Mammal.framework.Versions/A/Frameworks在框架的文件夹中,我有dog.dylib.安装名称dog.dylib是@ rpath/dog.dylib.对于"Runpath Search Paths"框架的设置,我已经指定了@loader_path/../Frameworks.(我对最后一个设置的推理是dylib的"loader"将是路径的框架的二进制文件Mammal.framework/Versions/A/Mammal.)

我在运行时收到一条错误消息:

Dyld Error Message:
  Library not loaded: @rpath/dog.dylib
  Referenced from: /Volumes/VOLUME/*/Animal.app/Contents/MacOS/../Frameworks/Mammal.framework/Versions/A/Mammal
  Reason: image not found
Run Code Online (Sandbox Code Playgroud)

我已经阅读了Apple的"Run-Path Dependent Libraries"文档和Mike Ash的博客文章@rpath,但我仍然看不出我做错了什么.

JWW*_*ker 6

事实证明,正确的运行路径搜索路径是@loader_path/Frameworks.我缺少的是@loader_path表示,而不是加载器的完整路径,但是该路径减去其最后一个组件. 迈克阿什的博客文章确实说,但我不知何故错过了它.因此,在框架的情况下,@ lader_path以A结尾.

  • 我不明白你到底做了什么才能让它发挥作用...像我 6 岁一样向我解释一下。 (2认同)
  • @Prof.Falken:在框架的构建设置中,在"链接"下,有一个名为"Runpath搜索路径"的设置.我将其值设置为`@ loader_path/Frameworks`. (2认同)