无法构建protobuf去端点

R.J*_*son 51 go protocol-buffers

使用protobuf版本2.6.1(我通过自制软件安装)

我想跑

$ protoc --go_out=../cloud/ *.proto
Run Code Online (Sandbox Code Playgroud)

我一直收到这个错误.

$ protoc-gen-go: program not found or is not executable
$ --go_out: protoc-gen-go: Plugin failed with status code 1.
Run Code Online (Sandbox Code Playgroud)

我在我的去路上安装了protoc-gen-go.其他人有这个问题吗?

Ken*_*rda 47

protoc-gen-go需要位于shell路径中,即PATH环境变量中列出的目录之一,它与Go路径不同.您可以通过protoc-gen-go在命令行输入来测试这个:如果它显示"未找到命令"(或类似),那么它不在你的PATH.

  • 仅供参考,它应该住在`$ GOPATH/bin`.这样做:`export PATH = $ PATH:$ GOPATH/bin` (8认同)
  • 我在路径和可执行文件中有它,但仍然报告`插件失败,状态代码为1.` (4认同)
  • @JiangYD,我遇到了同样的问题.看起来protoc无法扩展像〜/ go/bin这样的路径.确保使用PATH设置中的完整目录,如/ home/johndoe/go/bin而不是〜/ go/bin. (3认同)

小智 23

运用

$ go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
Run Code Online (Sandbox Code Playgroud)

比使用更安全

$ sudo apt-get install golang-goprotobuf-dev
Run Code Online (Sandbox Code Playgroud)

因为最新的protoc-gen-go是使用lib github.com/golang/protobuf/proto,但是protoc-gen-goapt-get使用code.google.com/p/goprotobuf/proto现在不存在的lib .


Quy*_*ang 16

  1. 您应该正确定义您GO_PATH的go软件包所在的位置。换句话说,GO_PATH就是您的go工作区。本GO_PATH 应该是~/go

  2. protoc-gen-go应该在你的PATH。当您安装它后protoc-gen-go$GO_PATH/bin


将以下2条重要行添加到您的~/.bash_profile

export GO_PATH=~/go
export PATH=$PATH:/$GO_PATH/bin
Run Code Online (Sandbox Code Playgroud)

然后,您需要启动一个新的shell会话,或者只需在此行中键入:

$ source ~/.bash_profile
Run Code Online (Sandbox Code Playgroud)

  • 为我工作!:) (2认同)

00i*_*j00 9

在Ubuntu 18.04上,经过验证可以解决此问题:

sudo apt-get install golang-goprotobuf-dev


小智 6

我有 Ubuntu 18.04.02 LTS 并protoc使用安装

sudo apt install protobuf-compiler
Run Code Online (Sandbox Code Playgroud)

我已经正确设置了 GOPATH 和 GOBIN,但是当我执行 a 时, protoc --go_out=. <filename> 我还是得到了

protoc-gen-go: program not found or is not executable
--go_out: protoc-gen-go: Plugin failed with status code 1.

Run Code Online (Sandbox Code Playgroud)

阅读了很多地方后,发现这样做

go get -u github.com/golang/protobuf/protoc-gen-go
Run Code Online (Sandbox Code Playgroud)

能够解决这个问题。希望这对那里的人有帮助。