突然想试试用go写个dylib供Objective-c调用,确发现总是报无法找到库的错误,无奈只好试试百度跟谷歌,总算是找到一个关于类似的问题的(ps:那些说改选项的就是个坑,都没说到关键点)。
不甘心后面又找到种方法了,见:http://log.zyxar.com/blog/2012/03/10/install-name-on-os-x/
install_name_tool -id "@loader_path/libmyhttp.dylib" libmyhttp.dylib
使用上面的方法后就不会要再运行那段脚本了,分发出去貌似都行了
其它方法:
具体问题要参见http://blog.csdn.net/ani_di/article/details/7078743
这里引用其中一段: “简单的说,可执行文件中要链接的动态库在连接时已经写死在可执行文件中了,这个路径来自dylib内部。我使用otool -L 查看了dylib的路径,是Debug/aaa.dylb,它等同于-o后面的参数。按照作者提供的方法,修改dylib的install_name即可,不过libtool命令行太复杂,加之苹果又修改了其参数,以至于我想依葫芦画瓢在build完成后加个patch都不行。正要放弃之际, 发现gcc有一个install_name的选项。死马当活马医,试试看。结果没问题。 修改工程的Properties -> C/C++ Build -> Settings -> MacOS X C++ Linker->Miscellaneous, 加上-install_name @executable_path/aaa.dylib参数,这样生成的动态库拷贝到demo的目录下就可以用了。”
原因是找到了,但因为不熟悉xcode,一时半会儿不知道怎么玩,只好继续google了,终于在go的issues中找到了一个解决方案。
在Xcode的Build Phases中添加一个Run Script, 脚本内容为
install_name_tool -change dy.dylib @loader_path/dy.dylib "$TARGET_BUILD_DIR/$TARGET_NAME.app/Contents/MacOS/$PRODUCT_NAME"
再次运行,已经正常了,但有点,如果是给别人用的话,感觉有点坑,不知道有没有更好的办法,直接写死到lib里面,试了好多种方式,编译出来的dylib都没有写死。
有疑问加站长微信联系(非本文作者)