MAC动态库加载问题

本文总结了在Mac系统中遇到dyld: Library not loaded错误的原因和解决方法。重点介绍了@executable_path, @loader_path和@rpath的含义与使用场景。对于动态库制作方,需要设置Dynamic Library Install Name;对于使用方,需将动态库复制到app包内并指定@rpath路径。当@rpath不能满足要求时,可通过install_name_tool修改动态库引用路径。同时提到了iOS应用导入动态库的特殊处理。" 133346205,20039294,Java实现折半插入排序算法详解,"['排序算法', 'Java', '算法', '数据结构']
摘要由CSDN通过智能技术生成

最近公司项目在使用动态库时,在运行时经常会报dyld: Library not loaded的问题,现总结下:

1,在 Mac 系统中,默认搜索库的路径是 /usr/lib ,并不像 Windows 一样 dll 放在和 exe 同级目录下也会被搜索到。即便你把动态库放到了.app的包里面了,在打开app运行时还是不能加载。因此会产生dyld: Library not loaded的问题。

 

2,掌握下mac xcode里面的几个路径含义:

@executable_path 这个变量表示可执行程序所在的目录. 比如 /path/QQ.app/Contents/MacOS/

@loader_path 这个变量表示每一个被加载的 binary (包括App, dylib, framework,plugin等) 所在的目录.

在一个程序中, 对于每一个模块, @loader_path 会解析成不用的路径, 而 @executable_path 总是被解析为同一个路径(可执行程序所在目录). 比如一个会被多个程序调用的 plugin, 位于 /path/Flash Player.plugin/Contents/MacOS/Flash Player, 依赖 /path/Flash Player.plugin/Contents/Frameworks/XPSSO.dylib. 那么 XPSSO.dylib 的 INSTALL_PATH 可以设置为 @loader_path/../Frameworks, 这样设置的话, 不论 Flash Player.plugin 目录放到什么位置, XPSSO.dylib 都能正确的被加载.

这个@loader_path是指被加载时的路径,意味着制作方的这个XPSSO.dylib动态库在使用时,使用方一定要放在可执行文件的上一级目录的Frameworks文件夹下面,这样一来Flash Player.plugin就可以放在在app里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值