Не удалось построить protobuf, чтобы перейти на конечную точку
с использованием protobuf версии 2.6.1 (который я установил через homebrew)
Я пытаюсь запустить
$ 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, установленный в моем пути.
У кого-нибудь еще есть эта проблема?
Ответы
Ответ 1
protoc-gen-go
должен находиться в вашем пути оболочки, то есть к одному из каталогов, перечисленных в переменной среды PATH
, которая отличается от пути Go. Вы можете проверить это, просто набрав protoc-gen-go
в командной строке: если он говорит "команда не найдена" (или аналогичная), то она не находится в вашем PATH
.
Ответ 2
Используя
$ go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
более безопасен, чем использование
$ sudo apt-get install golang-goprotobuf-dev
Поскольку последний protoc-gen-go
использует lib github.com/golang/protobuf/proto
, но protoc-gen-go
в apt-get
, используя lib code.google.com/p/goprotobuf/proto
, которого не было сейчас.
Ответ 3
На Ubuntu 18.04 это проверено для решения этой проблемы:
sudo apt-get install golang-goprotobuf-dev
Ответ 4
-
Вы должны правильно определить свой GO_PATH
- где живут ваши пакеты. Другими словами, GO_PATH
- это ваше рабочее пространство. GO_PATH
должен быть ~/go
.
-
protoc-gen-go
должен быть в вашей PATH
. Пока protoc-gen-go
живет в $GO_PATH/bin
после его установки.
Добавьте эти 2 важные строки в ваш ~/.bash_profile
:
export GO_PATH=~/go
export PATH=$PATH:/$GO_PATH/bin
Затем вам нужно запустить новый сеанс оболочки или просто ввести следующую строку:
$ source ~/.bash_profile
Ответ 5
Я встретил ту же проблему.
$ 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
тогда все в порядке.
Ответ 6
Как я решил:
- Добавьте
$GOPATH/bin
в PATH, выполнив export PATH=$PATH:$GOPATH/bin
- добавить
export GOPATH=$(go env GOPATH)
выше export PATH=$PATH:$GOPATH/bin
строка внутри файла .bash_profile
. - запустите
go get -u
для требуемых пакетов снова. - запустите код
protoc --go_out=../cloud/*.proto
в вашем случае.
Ответ 7
Мби поможет кому-то. Я на 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
на очарование.
Ответ 8
Убедитесь, что ваш путь к proton-gen-go
в вашей PATH
является абсолютным (т.е. /Users/me/go/bin
вместо ~/go/bin
.
По-видимому, protoc
не знает, как расширяться ~
.