Невозможно скомпилировать прото-файл в ubuntu для golang

Я установил эти пакеты:

google.golang.org/grpc

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

и экспортированный путь следующим образом:

export PATH=$PATH:/usr/local/go/bin

когда я пытаюсь скомпилировать прото-файл с помощью команды protoc, я вижу ошибку command not found:

protoc --go_out=. helloworld/helloworld.proto 

zsh: command not found: protoc

мой путь к проекту такой: /home/my-username/go/src/github.com/my-username/helloworld

моя версия go: go1.12.5

и я использую ubuntu 18.04

Когда я устанавливаю его с двоичным файлом, он работает, но скомпилированный файл go не содержит некоторых функций, таких как: RegisterGreeterServer или NewGreeterClient


person Aliasghar Soltani    schedule 24.05.2019    source источник
comment
Вы устанавливаете proto?   -  person Зелёный    schedule 24.05.2019
comment
@ Зелёный да установил   -  person Aliasghar Soltani    schedule 24.05.2019
comment
Попробуйте найти protoc в /usr/bin или /usr/local/bin.   -  person Зелёный    schedule 24.05.2019
comment
такого файла нет   -  person Aliasghar Soltani    schedule 24.05.2019
comment
следовательно, установка protobuf не удалась. Протобуф доставить protoc.   -  person Зелёный    schedule 24.05.2019
comment
Покажите свою PATH переменную, похоже, что она как-то испорчена. echo $PATH   -  person Зелёный    schedule 24.05.2019
comment
путь: /home/my-username/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/ USR / местные / игры: / оснастка / бен: / USR / локальные / идти / бен   -  person Aliasghar Soltani    schedule 24.05.2019
comment
Как вы установили protobuf? Показать все шаги.   -  person Зелёный    schedule 24.05.2019
comment
Я установил его с помощью этого: go get -u github.com/golang/protobuf/protoc-gen-go, следуя github .com / golang / protobuf шаги   -  person Aliasghar Soltani    schedule 24.05.2019
comment
Это библиотека, а не protobuf.   -  person Зелёный    schedule 24.05.2019
comment
@ Зелёный как мне установить protobuf на ходу?   -  person Aliasghar Soltani    schedule 24.05.2019
comment
Например, gist.github.com/olivoil/a2e0e4f3427db8b6ef4c4c4374f   -  person Зелёный    schedule 24.05.2019
comment
Я тестировал его, но когда он компилирует прото-файл, скомпилированный файл не содержит некоторых функций, таких как: RegisterGreeterServer или NewGreeterClient   -  person Aliasghar Soltani    schedule 24.05.2019
comment
Эта другая проблема, не имеющая отношения к вашему вопросу   -  person Зелёный    schedule 24.05.2019
comment
Пакет protobuf-compiler, представленный в упомянутой вами ссылке, не содержит этих функций при компиляции! Я знаю, что должен использовать пакет protoc-gen-go в golang, но не знаю, почему он не работает.   -  person Aliasghar Soltani    schedule 24.05.2019


Ответы (2)


zsh: command not found: protoc означает, что protoc не установлен на вашем компьютере. Для этого вам необходимо загрузить двоичный файл с официальных выпусков, так как вы используете ubuntu машину. , Я предлагаю вам загрузить протокол -3.7.1-linux-x86_64.zip (это последний protoc на момент написания этого ответа, вам следует проверить releases и загрузить последнюю версию)

Вы можете скачать через браузер или использовать следующую команду:

wget "https://github.com/protocolbuffers/protobuf/releases/download/v3.7.1/protoc-3.7.1-linux-x86_64.zip" -O protoc-3.7.1-linux-x86_64.zip

Теперь разархивируйте, вы получите две папки: «bin» и «include».

Скопируйте bin/protoc в /usr/local/bin/protoc и include/google в /usr/local/include/google

Это правильно установит protoc на ваш компьютер.

Чтобы проверить, правильно ли он установлен, попробуйте выполнить команду protoc на своем терминале. У вас должно получиться что-то вроде следующего

введите здесь описание изображения

Если вы по-прежнему сталкиваетесь с какими-либо проблемами, дайте мне знать.

Надеюсь это поможет!

person Dave Amit    schedule 24.05.2019
comment
Спасибо, мне помогло. Я обнаружил проблему и опубликовал свой ответ stackoverflow.com/a/56293038/6173668 - person Aliasghar Soltani; 24.05.2019
comment
Просто чтобы добавить, файлы, которые входят в папку в /usr/local/include, должны быть скопированы вместе со структурой каталогов. - person Sunil Kumar; 18.04.2020

Наконец, с помощью Amit я установил протокол protoc. но когда я скомпилировал прото-файл с помощью этой команды

protoc --go_out=. add/add.proto    

Скомпилированный файл go не содержал некоторых функций, например: RegisterGreeterServer или NewGreeterClient.

этот ответ Я обнаружил проблему и добавил plugins=grpc, затем попробовал эту команду, и она сработала:

protoc --go_out=plugins=grpc:. add/add.proto
person Aliasghar Soltani    schedule 24.05.2019