登录
首页 >  Golang >  Go问答

macOS cgo 如何正确设置 dylib 相对路径

来源:stackoverflow

时间:2024-03-07 14:33:25 358浏览 收藏

本篇文章给大家分享《macOS cgo 如何正确设置 dylib 相对路径》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

我目前正在尝试让一个用 c 编写的现有 dylib 在 go 中工作。 为此,我使用 cgo 并且一切都可以正确编译。 当 go build 尝试运行生成的可执行文件 dyld 时,找不到位于 go 源目录中的 dylib。

我正在使用这些 cflags 和 ldflags 但没有成功:

// #cgo cflags: -i${srcdir}
// #cgo ldflags: -l. -lmylibrary

我还了解到我可以使用魔术字符串 @executable_path 来指定相对库搜索路径,但将其添加到 -l 或尝试将 -install_name 添加到链接器标志不会产生任何结果。

这是我收到的链接器错误消息:

/Users/benedikt/sdk/go1.19.7/bin/go build -o /private/var/folders/.../T/GoLand/___1go_build_myapp myapp #gosetup
/private/var/folders/.../T/GoLand/___1go_build_myapp
dyld[58935]: Library not loaded: '/usr/local/lib/libMyLibrary.dylib'
  Referenced from: '/private/var/folders/.../T/GoLand/___1go_build_myapp'
  Reason: tried: '/usr/local/lib/libMyLibrary.dylib' (no such file), '/usr/lib/libMyLibrary.dylib' (no such file)

虽然没有在 go 之外添加任何构建步骤,但如何正确配置 cgo 以使用位于二进制文件稍后所在的同一文件夹中的 dylib,以便它可以与 go build 一起运行?


正确答案


事实证明我已经非常接近我的目标,但实际库中存储的搜索路径是错误的。

我的问题中的代码在修改库后工作正常,如下所示:

install_name_tool -id @loader_path/libMyLibrary.dylib libMyLibrary.dylib

虽然我还没有找到一种干净的方法来让 goland 控制 go build,将我的库复制到运行应用程序的输出目录,但我初步通过将输出目录设置为绝对路径并添加将依赖项复制到输出文件夹的预执行命令。

今天关于《macOS cgo 如何正确设置 dylib 相对路径》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>