猿问

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

在我的项目中运行 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"

我以为这是开发环境中缺少的依赖,但是在查看原始项目源时,包含路径是相对于源文件的。


为什么找不到文件?


动漫人物
浏览 109回答 2
2回答

莫回无

go 的一些依赖管理工具不会提供项目引用的所有代码。这意味着在某些情况下,可以在带有 cgo 的 go 文件中使用的 C 代码不包含在 vendor 目录中。我曾两次使用两个单独的供应商工具遇到过这个问题,但有一些工作可以支持这些用例。到目前为止我发现的最简单的方法是使用govendor然后导入完整的目录以确保所有需要的文件都在那里。这是一个非常简单的解决方案,它忽略了在 go 项目中包含 c 依赖项的很多复杂性,但修复了这个问题,同时没有永久修复这个问题。go get github.com/kardianos/govendorgovendor initgovendor add +e# Remove the directory that is missing the c dependenciesrm -rf ./vendor/github.com/ethereum/go-ethereum/crypto/secp256k1/# Add the file and include all files# https://github.com/kardianos/govendor/issues/247govendor add github.com/ethereum/go-ethereum/crypto/secp256k1/^

LEATH

在Gopkg.toml你可以添加[prune]&nbsp; go-tests = true&nbsp; unused-packages = true&nbsp; non-go = true&nbsp; [[prune.project]]&nbsp; &nbsp; name = "github.com/ethereum/go-ethereum"&nbsp; &nbsp; non-go = false&nbsp; &nbsp; unused-packages = false
随时随地看视频慕课网APP

相关分类

Go
我要回答