How can I install protoc on Ubuntu 16.04?

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

Here is Solutions:

We have many solutions to this problem, But we recommend you to use the first solution because it is tested & true solution that will 100% work for you.

Solution 1



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


  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

Solution 2

sudo apt install protobuf-compiler

Solution 3

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.

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/.)

Solution 4

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

sudo rm -rf ./protoc
unzip -d protoc
chmod 755 -R protoc
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.

Solution 5

1) Download binary from the url

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

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 -d protoc

chmod 755 -R protoc


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

sudo cp protoc/bin/protoc $BASE/bin

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

Solution 6

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.
sudo unzip -o $PROTOC_ZIP -d /usr/local bin/protoc
sudo unzip -o $PROTOC_ZIP -d /usr/local 'include/*'

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

Note: Use and implement solution 1 because this method fully tested our system.
Thank you 🙂

All methods was sourced from or, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply