在带有供应商依赖性的项目中运行go vet时出现此错误。
$ go vet ./...
# <project path...>/vendor/github.com/ethereum/go-ethereum/crypto/secp256k1
vendor/github.com/ethereum/go-ethereum/crypto/secp256k1/curve.go:42:10: fatal error: libsecp256k1/include/secp256k1.h: No such file or directory
#include "libsecp256k1/include/secp256k1.h"
我认为这是开发环境中缺少的依赖项,但是当查看原始项目源时,包含路径是相对于源文件的。
为什么找不到文件?
答案 0 :(得分:1)
一些用于go的依赖项管理工具未提供项目引用的所有代码。这意味着在某些情况下,可在带有cgo的go文件中使用的C代码未包含在供应商目录中。
在使用两个单独的供应商工具时,我两次遇到此问题,但是有工作可以支持这些use cases。
到目前为止,我发现的最简单的方法是使用govendor,然后导入完整的目录以确保所有必需的文件都在其中。这是一个非常简单的解决方案,它忽略了在go项目中包括c依赖项的许多复杂性,但是解决了该问题,而没有针对该问题的永久性解决方案。
go get github.com/kardianos/govendor
govendor init
govendor add +e
# Remove the directory that is missing the c dependencies
rm -rf ./vendor/github.com/ethereum/go-ethereum/crypto/secp256k1/
# Add the file and include all files
# https://github.com/kardianos/govendor/issues/247
govendor add github.com/ethereum/go-ethereum/crypto/secp256k1/^
答案 1 :(得分:0)
在Gopkg.toml
中,您可以添加
[prune]
go-tests = true
unused-packages = true
non-go = true
[[prune.project]]
name = "github.com/ethereum/go-ethereum"
non-go = false
unused-packages = false