Protobuf 25.3系列3-生成和运行

作者在使用protobuf25.3编译后遇到关于absl库引用错误,文章描述了如何查找并链接abseil库以解决编译问题,以及在CMake文件中的配置调整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

protobuf 25.3编译好了以后,写了一个简单的proto文件,进行序列化和反序列化验证。

生成pb的.cc和.h文件都没问题,但是在我的prototest里面,编译的时候,直接报了一堆类似以下的错误:

undefined reference to `absl::lts_20240116.1::log_internal::LogMessageFatal

难道现在pb文件生成以后,再编译,也要依赖absl了?

参考了网上的一些文章,也参考了protobuf里面的一些cmake写法,更新cmake文件:

cmake_minimum_required(VERSION 3.10)

file(GLOB c_files *.c *.cpp *.cc)

SET(THLIB_PATH /xxxx/xxxx)

find_package(utf8_range HINTS ${THLIB_PATH}/proto/lib/cmake CONFIG REQUIRED)
set(UTF8RANGE_LIBRARY utf8_range::utf8_validity utf8_range::utf8_range)

find_package(Protobuf HINTS ${THLIB_PATH}/proto/lib/cmake CONFIG REQUIRED)
set(PROTO_LIBARARY protobuf::libprotobuf)

find_package(absl HINTS ${THLIB_PATH}/absl/lib/cmake CONFIG REQUIRED)
set(ABSEL_LIBARARY
    absl::absl_check
    absl::absl_log
    absl::algorithm
    absl::base
    absl::bind_front
    absl::bits
    absl::btree
    absl::cleanup
    absl::cord
    absl::core_headers
    absl::debugging
    absl::die_if_null
    absl::dynamic_annotations
    absl::flags
    absl::flat_hash_map
    absl::flat_hash_set
    absl::function_ref
    absl::hash
    absl::layout
    absl::log_initialize
    absl::log_severity
    absl::memory
    absl::node_hash_map
    absl::node_hash_set
    absl::optional
    absl::span
    absl::status
    absl::statusor
    absl::strings
    absl::synchronization
    absl::time
    absl::type_traits
    absl::utility
    absl::variant
  )

add_executable(prototest ${c_files})
target_link_libraries(prototest ${PROTO_LIBARARY} ${UTF8RANGE_LIBRARY} ${ABSEL_LIBARARY})

在Linux系统上安装Protocol Buffers (protobuf) V25.3,你可以按照以下步骤操作: 1. **检查版本更新**: 首先确保你的系统已经安装了`git`必要的依赖,比如`build-essential`。打开终端并运行以下命令: ``` sudo apt-get update sudo apt-get install git make cmake build-essential ``` 2. **下载protobuf源码**: 到GitHub克隆protobuf的仓库,指定到特定版本25.3: ``` git clone https://github.com/protocolbuffers/protobuf.git cd protobuf git checkout v25.3 ``` 3. **配置构建**: 创建一个Makefile文件,并设置编译选项。例如,在根目录下创建`src/WORKSPACE`文件,并编辑它来指定版本: ```makefile load("@com_google_protobuf//:WORKSPACE") bazel_version = "3.7.2" bazel_configure_args = [ "--copt=-Wno-sign-compare", # optional - suppress a warning if you prefer "--host_crosstool_top=@bazel_tools//tools/cpp:toolchain", "--define=grpc_no_ares=true", ] ``` 然后进入`src`目录并运行Bazel构建: ``` mkdir -p bazel-out/local-fastbuild/bin bazel build --host_javabase=@bazel_tools//tools/jdk:remotejdk8 \ --action_env=GOGO_VERSION=v1.16.0 ``` 如果一切顺利,`bazel-bin/src/protoc`就是你所需要的protobuf编译器。 4. **安装protoc**:生成的protoc二进制文件复制到系统路径下的可执行文件夹,通常 `/usr/local/bin` 或 `~/bin`。如果需要添加自定义路径,可以编辑系统的`PATH`环境变量。 5. **验证安装**: 最后,你可以通过运行`protoc --version`来确认protobuf是否成功安装并且是v25.3版本。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值