首页 > 后端开发 > Golang > 如何在 macOS 上的 cgo 中指定相对 dylib 路径

如何在 macOS 上的 cgo 中指定相对 dylib 路径

WBOY
发布: 2024-02-08 22:10:27
转载
801 人浏览过

如何在 macOS 上的 cgo 中指定相对 dylib 路径

在 macOS 上使用 cgo 并指定相对 dylib 路径是一个常见的问题。 cgo 是 Go 语言用于与 C 语言进行交互的工具,而 dylib 是 macOS 上的动态链接库。指定相对路径可以使项目更加灵活和可移植。那么,我们应该如何在 macOS 上的 cgo 中指定相对 dylib 路径呢?php小编草莓将为您详细解答。

问题内容

我目前正在尝试让一个用 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 路径的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:stackoverflow.com
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板