Resolving Protobuf Configuration Issue Without Sudo Access
When compiling projects that depend on the Protocol Buffers (protobuf) library, you may encounter configuration errors if the library is not found. In environments where you don't have sudo privileges, the solution requires a bit more effort.
Problem Description
During the CMake build configuration process, you might encounter an error like:
Could NOT find Protobuf (missing: Protobuf_LIBRARIES Protobuf_INCLUDE_DIR)
This suggests that CMake is unable to locate the protobuf libraries and include directories.
Solution
1. Download Protobuf Source
First, obtain the Protobuf source code from the official repository:
bash
wget https://github.com/protocolbuffers/protobuf/releases/download/v3.17.3/protobuf-all-3.17.3.tar.gz
Note: Adjust the version number and URL based on the version you need.
2. Extract and Build Protobuf
Extract the downloaded source and build it:
bash
tar xvf protobuf-all-3.17.3.tar.gz
cd protobuf-3.17.3
./configure --prefix=$HOME/local
make
make install
This compiles and installs protobuf in a local
directory within your home directory.
3. Adjust Environment Variables
Update your environment variables to ensure tools and libraries can find your local protobuf installation:
bash
export PATH=$HOME/local/bin:$PATH
export LD_LIBRARY_PATH=$HOME/local/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=$HOME/local/lib/pkgconfig:$PKG_CONFIG_PATH
To make these changes permanent, add the above lines to your .bashrc
or .bash_profile
.
4. Re-run CMake
Navigate back to your project's build directory and run CMake:
bash
cd /path/to/your/build/directory
cmake ..
If CMake is still unable to find Protobuf, you can specify the paths manually:
bash
cmake -DProtobuf_INCLUDE_DIR=$HOME/local/include -DProtobuf_LIBRARIES=$HOME/local/lib ..