gpt4 book ai didi

go - 在 go 项目中使用 cgo 包含 libsodium 失败

转载 作者:数据小太阳 更新时间:2023-10-29 03:36:05 24 4
gpt4 key购买 nike

我正在尝试包含 libsodium进入我的 Go 项目。为此,我在我的项目中复制了 repo

// #cgo CFLAGS: -I/mypath/libsodium/src/libsodium/include/sodium
// #include <stdlib.h>
// #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但是不添加本地路径怎么办呢?

最佳答案

您确实需要链接库, header 本身只是库的接口(interface),不会将实际的 libsodium 代码链接到您的二进制文件。

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

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

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

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

pkg-config --cflags --libs libsodium

关于go - 在 go 项目中使用 cgo 包含 libsodium 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57570179/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com