Golang 生成Mac OS X dylib调用问题

不在乎y · · 5737 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

突然想试试用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中找到了一个解决方案。

具体见issues https://github.com/golang/go/issues/12700

在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都没有写死。

输入图片说明


有疑问加站长微信联系(非本文作者)

本文来自:开源中国博客

感谢作者:不在乎y

查看原文:Golang 生成Mac OS X dylib调用问题

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

5737 次点击  
加入收藏 微博
1 回复  |  直到 2017-11-20 01:49:37
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传