50

How can I install protoc, the protobuf compiler to generate Java, on Ubuntu 16.04?

82

See https://github.com/protocolbuffers/protobuf/blob/master/src/README.md:

Prerequesites

$ sudo apt-get install autoconf automake libtool curl make g++ unzip

Installation

  1. From this page, download the protobuf-all-[VERSION].tar.gz.
  2. Extract the contents and change in the directory
  3. ./configure
  4. make
  5. make check
  6. sudo make install
  7. sudo ldconfig # refresh shared library cache.

Check if it works

$ protoc --version
libprotoc 3.6.1
10
39
sudo apt install protobuf-compiler
1
  • 1
    It results in "Setting up protobuf-compiler (2.6.1-1.3)" - might not be the version everyone wants – y.selivonchyk Nov 1 '19 at 23:11
6

If you are a non-C++ user and/or don't want to compile it yourself, the simplest way to install the current version of protoc is to download a pre-built binary from the release page.

https://github.com/protocolbuffers/protobuf/releases

To install, simply place this binary somewhere in your PATH (e.g. /usr/local/bin).

(If you intend to use the included well known types then don't forget to copy the contents of the 'include' directory somewhere as well, for example into /usr/local/include/.)

2
  • You may also need some protos from Google's Common API protos. Clone [the repo][4] and move the contents of google to /usr/local/include/. – Jack Apr 18 '20 at 15:11
  • protoc is not looking in /usr/local/include for me, at least by default. – Bryan May 8 '20 at 11:07
2

You can download binary from the source code and use next commands

sudo rm -rf ./protoc
unzip protoc-3.10.1-linux-x86_64.zip -d protoc
chmod 755 -R protoc
BASE=/usr/local
sudo rm -rf $BASE/include/google/protobuf/
sudo cp protoc/bin/protoc $BASE/bin 
sudo cp -R protoc/include/* $BASE/include 

Change your base to /usr/, or /usr/loca/, or anything else in your PATH.

1

1) Download binary from the url https://github.com/protocolbuffers/protobuf/releases

2) extract and keep the directory at particular location (/user/app/protoc)

3) add the entry in /usr//.bash_profile as export PROTOC_HOME=/user/app/protoc export PATH=$PROTOC_HOME/bin:$PATH

4) refresh file $source /usr/<username>/.bash_profile

Other option is run the following command one by one after downloading the repository :

sudo rm -rf ./protoc

unzip protoc-3.10.1-linux-x86_64.zip -d protoc

chmod 755 -R protoc

BASE=/usr/local

sudo rm -rf $BASE/include/google/protobuf/

sudo cp protoc/bin/protoc $BASE/bin

sudo cp -R protoc/include/* $BASE/include

0

Use this if you are having errors like

google/protobuf/descriptor.proto: File not found.
google/protobuf/duration.proto: File not found.
google/protobuf/timestamp.proto: File not found.

PROTOC_ZIP=protoc-3.7.1-linux-x86_64.zip
curl -OL https://github.com/protocolbuffers/protobuf/releases/download/v3.7.1/$PROTOC_ZIP
sudo unzip -o $PROTOC_ZIP -d /usr/local bin/protoc
sudo unzip -o $PROTOC_ZIP -d /usr/local 'include/*'
rm -f $PROTOC_ZIP

This is useful when you are doing generation for go using protoc-gen-go as it requires the base proto files to be present in default include folders

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.