#### Beyond Linux® From Scratch (System V Edition) - Version 12.3

### Chapter 9. General Libraries

- Prev

  Popt-1.19

- Next

  Protobuf-c-1.5.1

- Up
- Home

# Protobuf-29.3

## Introduction to Protobuf

The Protobuf package contains utilities and libraries for using data in Google's data interchange format.

This package is known to build and work properly using an LFS 12.3 platform.

### Package Information

- Download (HTTP): https://github.com/protocolbuffers/protobuf/releases/download/v29.3/protobuf-29.3.tar.gz

- Download MD5 sum: 4bc7da60038e4b10de416415c7988ec7

- Download size: 8.9 MB

- Estimated disk space required: 137 MB

- Estimated build time: 1.4 SBU (with parallelism=4)

### Protobuf Dependencies

#### Required

Abseil-cpp-20250127.0 and CMake-3.31.5

#### Optional

gtest (for tests)

## Installation of Protobuf

Install Protobuf by running the following commands:

    mkdir build &&
    cd    build &&

    cmake -D CMAKE_INSTALL_PREFIX=/usr      \
          -D CMAKE_BUILD_TYPE=Release       \
          -D CMAKE_SKIP_INSTALL_RPATH=ON    \
          -D protobuf_BUILD_TESTS=OFF       \
          -D protobuf_ABSL_PROVIDER=package \
          -D protobuf_BUILD_LIBUPB=OFF      \
          -D protobuf_BUILD_SHARED_LIBS=ON  \
          -G Ninja ..                       &&
    ninja

This package does come with a test suite, but it requires gtest, which is not part of BLFS.

Now, as the `root` user:

    ninja install

## Command Explanations

`-D CMAKE_SKIP_INSTALL_RPATH=ON`: This switch makes cmake remove hardcoded library search paths (rpath) when installing a binary executable file or a shared library. This package does not need rpath once it's installed into the standard location, and rpath may sometimes cause unwanted effects or even security issues.

`-D protobuf_BUILD_TESTS=OFF`: This parameter prevents the tests from being built because gtest is not part of BLFS.

`-D protobuf_ABSL_PROVIDER=package`: This parameter allows the build system to use the system-installed copy of Abseil-cpp-20250127.0.

`-D protobuf_BUILD_SHARED_LIBS=ON`: This parameter enables building shared versions of the libraries provided by this package instead of static versions.

## Contents

Installed Programs: protoc-29.3.0 and protoc (a symlink to protoc-29.3.0)
Installed Libraries: libprotobuf.so, libprotobuf-lite.so, libprotoc.so, libutf8_range.so, and libutf8_validity.so
Installed Directories: /usr/include/google, /usr/include/java, /usr/include/upb_generator, /usr/lib/cmake/protobuf, and /usr/lib/cmake/utf8_range

### Short Descriptions

protoc | parses protocol buffer files and generates output for several programming languages and formats
`libprotobuf.so` | contains functions for utilizing data in Google's data interchange format
`libprotobuf-lite.so` | contains a simpler version of the functions for utilizing data in Google's data interchange format
`libprotoc.so` | contains functions used by protoc at runtime for outputting data for several programming languages and formats
`libutf8_range.so` | contains functions that allow a program to determine whether a sequence of characters is a valid UTF-8 sequence
`libutf8_validity.so` | contains functions that allow a program to determine whether a sequence of bytes is a valid UTF-8 sequence, and to find what the longest valid prefix of the sequence is

- Prev

  Popt-1.19

- Next

  Protobuf-c-1.5.1

- Up
- Home