无法构建protobuf去端点

时间:2015-01-22 21:27:02

标签: go protocol-buffers

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

我正在尝试运行

$ protoc --go_out=../cloud/ *.proto

我一直收到这个错误。

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

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

12 个答案:

答案 0 :(得分:43)

protoc-gen-go需要位于 shell 路径中,即PATH环境变量中列出的目录之一,与Go路径不同。您只需在命令行键入protoc-gen-go即可对此进行测试:如果显示"命令未找到" (或类似的)然后它不在你的PATH

答案 1 :(得分:23)

使用

$ sudo apt-get install golang-goprotobuf-dev

比使用

更安全
protoc-gen-go

因为最新的github.com/golang/protobuf/proto正在使用lib protoc-gen-go,而apt-get使用现在不存在的lib code.google.com/p/goprotobuf/proto {{1}}。

答案 2 :(得分:8)

  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

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

$ source ~/.bash_profile

答案 3 :(得分:6)

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

sudo apt-get install golang-goprotobuf-dev

答案 4 :(得分:2)

我遇到了同样的问题。

$ protoc --go_out=plugins=grpc:pb/ *.proto
protoc-gen-go: program not found or is not executable
--go_out: protoc-gen-go: Plugin failed with status code 1.

解决方案如下:

找到protoc-gen-go的安装目录,它必须位于$PATH

export PATH=$PATH:/path/to/dir

您最好将其添加到.bash_profile

echo $"export PATH=\$PATH:$(/path/to/dir)" >> ~/.bash_profile
source ~/.bash_profile

然后一切都好。

答案 5 :(得分:2)

我如何解决:

  1. 通过运行将$GOPATH/bin添加到PATH export PATH=$PATH:$GOPATH/bin
  2. export GOPATH=$(go env GOPATH)文件内export PATH=$PATH:$GOPATH/bin行上方添加.bash_profile
  3. 再次运行go get -u以获取所需的软件包。
  4. 根据您的情况运行代码protoc --go_out=../cloud/ *.proto

答案 6 :(得分:1)

我要解决的问题是:

从go工作区的go bin文件夹中复制protoc-gen-go到/ usr / local / bin /

像以前一样运行命令“ protoc --go_out = .. / cloud / * .proto”

答案 7 :(得分:1)

直接来自grpc documentation

协议编译器的 Go 插件:

使用以下命令为 Go 安装协议编译器插件:

$ g++ ./try2.cpp -std=c++17
$./a.out
sv:123456789-5c51509f-8c5c5dc2-b6557
xx.second:123456789-5c51509f-8c5c5dc2-b6557
yy.second:9-5c51509f-8c5c5dc2-b6557

更新您的 PATH 以便 protoc 编译器可以找到插件:

$ export GO111MODULE=on  # Enable module mode
$ go get google.golang.org/protobuf/cmd/protoc-gen-go \
         google.golang.org/grpc/cmd/protoc-gen-go-grpc

答案 8 :(得分:0)

Mby将为某人提供帮助。我正在使用Fedora 29。

当我安装Go时,我做了:

echo 'export GOPATH=$HOME/Go' >> $HOME/.bashrc
source $HOME/.bashrc

所以我设置了我的GOPATH。 接下来,我要做:

echo 'export PATH=$PATH:$GOPATH/bin' >> $HOME/.bashrc
source $HOME/.bashrc

而我的protoc编译器则很吸引人。

答案 9 :(得分:0)

确保在proton-gen-go变量中到PATH的路径是绝对路径(即/Users/me/go/bin而不是~/go/bin

显然,protoc不知道如何扩展~

答案 10 :(得分:0)

我有Ubuntu 18.04.02 LTS,并使用

安装了protoc
sudo apt install protobuf-compiler

我的GOPATH和GOBIN设置正确,但是仍然 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.

看了一堆地方后,发现自己在做

go get -u github.com/golang/protobuf/protoc-gen-go

能够解决此问题。 希望这对外面的人有帮助。

答案 11 :(得分:0)

如果您使用的是Fedora,请确保已安装“ protoc-gen-go”软件包,并且二进制文件位于您的shel PATH中。

$ sudo dnf install protoc-gen-go -y