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