MAC引用动态库时报错:
查看一个可执行文件或者动态库引用的第三方库路径:otool -L xxx.dylib
- 第一行是动态库的安装名称(INSTALL Name)。当另一个客户端链接到这个 dylib 时,dylib 的安装 ID 会被复制到客户端中作为dylib的安装路径。
- 后边的才是这个动态库引用到的第三方库。
使用install_name_tool 的id参数来修改这个install name:
sudo install_name_tool -id @executable_path/../xxx.dylib xxx.dylib
将动态链接库添加到.app的搜索路径中:
install_name_tool -add_rpath /xxx/lib ./NetAnim
@executable_path
:可执行程序所在的目录
@loader_path
:表示每一个被加载的 binary (包括App, dylib, framework,plugin等) 所在的目录。
@rpath
是一个类似Shell中的PATH的变量,程序在执行时会从@rpath
指定的路径中寻找动态链接库文件。
MAC:@rpath的坑
踩坑1:install_name修改失败
库文件加载失败,通过otool -l xxx.dylib
查看报错中的“command 5”。
- 如果为一个Mac OS X版本构建对象,然后在早期的Mac OS X版本上使用该对象,则可能会发生“未知加载命令”错误。
Mac load命令损坏
otool-目标文件显示工具