运行时使用dep找不到头文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了运行时使用dep找不到头文件相关的知识,希望对你有一定的参考价值。
我在项目中运行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"
我认为这是开发环境中缺少的依赖项,但在查看原始项目源时,include路径是相对于源文件的。
为什么找不到文件?
答案
用于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/^
另一答案
在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
以上是关于运行时使用dep找不到头文件的主要内容,如果未能解决你的问题,请参考以下文章