登录
首页 >  Golang >  Go问答

在 go 项目中使用 cgo 集成 libsodium 遇到问题

来源:stackoverflow

时间:2024-03-23 12:21:35 159浏览 收藏

在 Go 项目中集成 libsodium 时,用户遇到 undefined reference to `crypto_sign_ed25519_pk_to_curve25519` 错误。虽然用户尝试了不同的方法,包括引用“.c”文件和复制头文件,但都没有成功。用户怀疑需要添加 ldflags 并生成 .so 文件,但希望寻找其他解决方案。

问题内容

我正在尝试将 libsodium 包含到我的 go 项目中。为此,我已将存储库复制到我的项目中

// #cgo cflags: -i/mypath/libsodium/src/libsodium/include/sodium
// #include 
// #include "crypto_sign_ed25519.h"
import "c"

尝试构建项目时出现以下错误:

/tmp/go-build/cgo-gcc-prolog:53: undefined reference to `crypto_sign_ed25519_pk_to_curve25519'
collect2: error: ld returned 1 exit status

可以找到该文件,但存在错误。 我还尝试引用“.c”文件并将 crypto_sign_ed25519.h 复制到 src 文件夹中,但它不起作用。 我的问题是我是否必须添加 ldflags 并因此从库中生成 .so 文件,或者不需要该文件,并且还有另一种可能的方法吗?

更新:我已经通过在本地 ubuntu 上安装库来使其运行:

$ ./configure
$ make && make check
$ sudo make install

并添加 // #cgo ldflags: -l/usr/local/lib -lsodium 但是不添加本地路径怎么办呢?


解决方案


您确实需要链接该库,标头本身只是该库的接口,并不将实际的 libsodium 代码链接到您的二进制文件。

假设 libsodium 附带了一个 pkg-config 文件(似乎是这样),您可以使用类似的东西

// #cgo pkg-config: libsodium
// #include "crypto_sign_ed25519.h"

有关 pkg-config 支持的更多信息,请参阅 https://golang.org/cmd/cgo/

要查看您将获得哪些 cflags/libs(cgo 将使用什么),请运行:

pkg-config --cflags --libs libsodium

今天关于《在 go 项目中使用 cgo 集成 libsodium 遇到问题》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

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