最近刚接触osx下的开发,遇到一个link的第三方库始终是绝对路径的问题。最后才发现osx上库被link的路径居然是库自己决定的。解决办法如下:
otool -L lib_a.dylib # 查看库的link情况
第一行是库的安装路径,就是这一行导致了程序link路径变成了绝对值。修改方法:
install_name_tool -id @executable_path/lib/lib_a.dylib lib_a.dylib
@executable_path是可执行文件所在目录,换成相对路径的关键就在于此。当然也可以用@rpath
如果lib_a.dylib中还link了另一个库,也是随程序一起提供的,那么也需要修改。修改方法:
install_name_tool -change /usr/local/bin/lib_b.dylib @executable_path/lib/lib_b.dylib lib_a.dylib
修改完后在用这个库编译工程就没有link的问题了。lib_a.dylib和lib_b.dylib发布的时候复制到可执行文件同目录的lib下即可。