运行时使用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找不到头文件的主要内容,如果未能解决你的问题,请参考以下文章

vscode下运行c++找不到头文件是怎么回事

Xcode Archive 在子项目中找不到头文件

关于VC6.0的找不到头文件的问题

gem install:无法构建 gem 原生扩展(找不到头文件)

vc++编程找不到头文件。。。急求解决方法。。

如何解决gcc编译c程序找不到头文件的问题