Protobuf源码安装指导
当前发布版本需要用户手动安装Protobuf,推荐以源码编译的形式安装,安装步骤如下所示。
- 下载Protobuf和编译依赖的Abseil源码包,两个源码包放在同一目录。
- 解压源码包。
tar -zxvf abseil-cpp-20230802.2.tar.gz tar -xzf protobuf-25.1.tar.gz mv abseil-cpp-20230802.2/* protobuf-25.1/third_party/abseil-cpp/ cd protobuf-25.1
- 生成编译配置,用户可通过--prefix指定安装路径。推荐安装在系统目录下。
mkdir build && cd build cmake .. -DCMAKE_INSTALL_PREFIX=/usr -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf_BUILD_SHARED_LIBS=ON -DCMAKE_CXX_STANDARD=17
- 编译protoc及Protobuf runtime。
make -j
可使用多线程编译提高编译速度,其中{n}根据设备性能进行选择。
make -j {n} - 安装protoc及Protobuf runtime,并刷新动态库配置缓存。
# 非root账号需要使用sudo安装 sudo make install sudo ldconfig
- 若用户指定安装目录为/usr,则protoc安装在“/usr/bin”目录下,libprotobuf.a & *.so安装在“/usr/lib”目录下。
- 若用户指定安装路径非系统目录,则需要将bin和lib路径导入到环境变量,示例如下所示。
# 若指定--prefix=/path/to/protobuf export PATH=/path/to/protobuf/bin:$PATH export LD_LIBRARY_PATH=/path/to/protobuf/lib:$LD_LIBRARY_PATH
- 执行以下命令,查看版本。若打印版本信息,表示安装成功。
protoc --version # libprotoc 25.1
- 进行软链接。
- 观察打印信息,发现关键词“version 'GLIBCXX_3.4.29' not found”,请执行步骤7.b。
protoc: /usr/bin/../lib64/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /usr/bin/../lib64/libprotoc.so.25.1.0) protoc: /usr/bin/../lib64/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /usr/bin/../lib64/libprotobuf.so.25.1.0) protoc: /usr/bin/../lib64/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /usr/bin/../lib64/libabsl_log_internal_message.so.2308.0.0) protoc: /usr/bin/../lib64/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /usr/bin/../lib64/libabsl_log_internal_log_sink_set.so.2308.0.0) protoc: /usr/bin/../lib64/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /usr/bin/../lib64/libabsl_flags_marshalling.so.2308.0.0) protoc: /usr/bin/../lib64/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /usr/bin/../lib64/libabsl_flags_reflection.so.2308.0.0) protoc: /usr/bin/../lib64/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /usr/bin/../lib64/libabsl_status.so.2308.0.0) protoc: /usr/bin/../lib64/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /usr/bin/../lib64/libabsl_cord.so.2308.0.0) protoc: /usr/bin/../lib64/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /usr/bin/../lib64/libabsl_cordz_handle.so.2308.0.0) protoc: /usr/bin/../lib64/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /usr/bin/../lib64/libabsl_crc_cord_state.so.2308.0.0) protoc: /usr/bin/../lib64/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /usr/bin/../lib64/libabsl_str_format_internal.so.2308.0.0) protoc: /usr/bin/../lib64/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /usr/bin/../lib64/libabsl_synchronization.so.2308.0.0) protoc: /usr/bin/../lib64/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /usr/bin/../lib64/libabsl_strings.so.2308.0.0) protoc: /usr/bin/../lib64/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /usr/bin/../lib64/libabsl_time_zone.so.2308.0.0)
- 将/usr/lib64/libstdc++.so.6软链接到libstdc++.so.6.0.29及以上。
例如环境已经按照要求安装了GCC 12.3.0,可以执行以下命令进行软链接:
sudo ln -sf /usr/local/gcc-12/lib64/libstdc++.so.6.0.30 /usr/lib64/libstdc++.so.6
使用软链接替换libstdc++.so后,若执行yum、rpm等命令,可能会重置该软链接,导致编译固件过程中报错。当出现“version 'GLIBCXX_3.4.29' not found”报错时,请重新执行步骤7.b。
- 观察打印信息,发现关键词“version 'GLIBCXX_3.4.29' not found”,请执行步骤7.b。
父主题: FAQ