关于macos:Mac动态库的install-name

43次阅读

共计 841 个字符,预计需要花费 3 分钟才能阅读完成。

某次 Mac 更新后,.dylib 减少了 install name 一说。明天回归工作第一天,依赖了动静库的 mac 我的项目调试运行不起来,提醒“@load_path/libxxx.dylib”找不到。好吧,来纠缠一会。

查找了材料,发现上面的文章解说得比拟明确。
Mac OSX 中的 @executable_path, @load_path 和 @rpath 的了解

总结:

动静库生成时,会有一个装置名,包含门路和名称。门路能够是绝对路径,也能够是相对路径。当有我的项目依赖它时,会把这个装置名作为依赖项记录下来。在启动的时候,依据这个装置名,去查找该动静库。

如何查看门路

otool -L xxx.dylib /otool -L xxx.app
对于.dylib,第一个就是它的装置门路。其余的是依赖的动静库门路。

* 注:装置名里的名字,就是它的全名。libxxx.dylib 和 xxx.dylib 不是同一个货色。* 注 2:库的装置门路是能够批改的。这里就不讲了。

三种相对路径

@executable_path

可执行文件所在门路,如果我的项目是 xxx.app,则 @executable_path 为 xxx.app/Contents/Macos

@load_path

对于 plugin 所援用的动静库,门路在 plugin 上面,详情见下面的文章。如果是.app,则和 @executable_path 是一样的。

@rpath

这个设置最灵便,就像动态库的库门路一样。通过它,能够为一个我的项目设置多个 rpath。毛病就是依赖 @rpath 的,还须要额定设置 @rpath 门路。

* 注:xcode 通过 Build Settings -> Linking -> Runpath Search Paths 来设置。

Mac 调试不正确问题解决

计划一

理解了以上三个目录的正确地位,就能轻松把 libxxx 的 install name 调整正确了。名字也要改成一样的。

计划二

间接删除 install name 的设置。生成的.dylib 会以生成地位的绝对路径作为 install name 记录到动静库中。

正文完
 0