使用dep运行go vet时未找到头文件

使用dep运行go vet时未找到头文件,go,dependency-management,cgo,Go,Dependency Management,Cgo,在我的项目中运行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:

在我的项目中运行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"
$go vet./。。。
#/vendor/github.com/ethereum/go-ethereum/crypto/secp256k1
vendor/github.com/ethereum/go-ethereum/crypto/secp256k1/curve.go:42:10:致命错误:libsecp256k1/include/secp256k1.h:没有这样的文件或目录
#包括“libsecp256k1/include/secp256k1.h”
我认为这是开发环境中缺少的依赖项,但是当查看原始项目源时,include路径是相对于源文件的


为什么找不到文件?

一些go依赖项管理工具不提供项目引用的所有代码。这意味着在某些情况下,可以在带有cgo的go文件中使用的C代码不包括在供应商目录中

我在使用两个独立的供应商工具时两次遇到了这个问题,但仍有工作支持这些工具

到目前为止,我发现的最简单的方法是使用并导入完整的目录,以确保所有必需的文件都在那里。这是一个非常简单的解决方案,它忽略了在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/^

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

它适合我,只需将最后一行中的
go add
更改为
govendo add