Objective-C @executable_path、@loader_path和@rpath

工程配置中,有三个路径和库的加载息息相关:

1、@executable_path

可执行文件的路径,例如/Applications/WeChat.app/Contents/MacOS。

 

2、@loader_path

被加载的二进制的路径,若该二进制是可执行文件,则@loader_path等价于@executable_path。

适用于非可执行二进制嵌套的场景,例如frameworkA包含frameworkB,frameworkB的加载路径就可以根据frameworkA的@loader_path给出。

 

3、@rpath

即run path,对应于工程配置中的Runpath Search Paths。是一个或者多个路径的列表,类似于环境变量$PATH。 

 

当库的加载路径出错时,就会报如下错误:

dyld: Library not loaded

这时可以利用otool工具查看二进制依赖的库,例如Mac微信: 

otool -L /Applications/WeChat.app/Contents/MacOS/WeChat  

然后使用install_name_tool工具来修正错误路径即可。

 

参考链接:

https://wincent.com/wiki/%40executable_path%2C_%40load_path_and_%40rpath

posted @ 2018-11-27 20:05  happyyoung  阅读(1734)  评论(0编辑  收藏  举报