加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Golang 生成Mac OS X dylib调用问题

发布时间:2020-12-16 19:13:39 所属栏目:大数据 来源:网络整理
导读:突然想试试用go写个dylib供Objective-c调用,确发现总是报无法找到库的错误,无奈只好试试百度跟谷歌,总算是找到一个关于类似的问题的(ps:那些说改选项的就是个坑,都没说到关键点)。 不甘心后面又找到种方法了,见:http://log.zyxar.com/blog/2012/03/1

突然想试试用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://www.52php.cn/article/p-oxgsqsfw-kp.html

这里引用其中一段:
“简单的说,可执行文件中要链接的动态库在连接时已经写死在可执行文件中了,这个路径来自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都没有写死。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读