ubuntu22.04安装使用 protobuf 23.3静态库

这篇具有很好参考价值的文章主要介绍了ubuntu22.04安装使用 protobuf 23.3静态库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

https://github.com/protocolbuffers/protobuf/

下载最新的release版本,23.3

必须需要依赖的第三方库 abseil,utf8_range

mkdir build

cd build

cmake -DCMAKE_BUILD_TYPE=DEBUG  -DCMAKE_INSTALL_PREFIX=/usr/local -Dprotobuf_BUILD_SHARED_LIBS=OFF -Dprotobuf_WITH_ZLIB=OFF -Dprotobuf_BUILD_TESTS=OFF ..

make

sudo make install

或直接修改CmakeList.txt 添加/修改以下内容

set(protobuf_VERBOSE ON) #debug信息
set(protobuf_BUILD_TESTS  OFF)#不编译test
set(protobuf_WITH_ZLIB  OFF)  #不使用zlib
set(protobuf_WITH_ZLIB_DEFAULT OFF)#不使用zlib
set(protobuf_BUILD_SHARED_LIBS  OFF)#静态库
set(protobuf_BUILD_SHARED_LIBS_DEFAULT  OFF)#静态库
set(CMAKE_INSTALL_PREFIX /usr/local)#安装路径

如果要建立动态库,依赖的abseil 最好也是动态库.

安装后使用的方法,在target_link_libraries里,需要先写protobuf,然后rtf8_range,最后才是absl。 顺序不可以改变,因为protobuf要依赖后两个,rtf8_range要依赖absl

目录结构

ubuntu22.04安装使用 protobuf 23.3静态库

 cmakeList.txt

absl把所有的都一起贴上了

cmake_minimum_required(VERSION 3.19)
project(protobut_demo)

set(CMAKE_CXX_STANDARD 17)

include_directories(/usr/local/include)
#------------------------------------------------------------------
find_package(Protobuf REQUIRED)
include_directories(${Protobuf_INCLUDE_DIRS})
#${Protobuf_LIBRARIES}
#检查是否有值
MESSAGE("Protobuf lib path :" ${Protobuf_LIBRARIES})
MESSAGE("Protobuf include path:" ${Protobuf_INCLUDE_DIRS})
MESSAGE("Protobuf exetuable path:" ${PROTOBUF_PROTOC_EXECUTABLE})

# proto源文件位置
SET(PROTO_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/proto)

# proto 文件生成位置,包含.pb.cc 和 .pb.h
SET(PROTO_OUTPUT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/proto_output)

# proto 文件
file(GLOB proto_files
        ${CMAKE_CURRENT_SOURCE_DIR}/proto/*.proto
        )
# 生成文件
FOREACH(PROTO_FILE ${proto_files})
    EXECUTE_PROCESS(
            COMMAND ${PROTOBUF_PROTOC_EXECUTABLE} -I${PROTO_SOURCE_DIR} --cpp_out=${PROTO_OUTPUT_DIR} ${PROTO_FILE}
    )
ENDFOREACH()
#---------------------------------------------------------------------------------------------
include_directories(${PROTO_OUTPUT_DIR})#生成的头文件路径

# 将proto生成的.pb.cc 和 .pb.h分类

file(GLOB contacts_All
        ${PROTO_OUTPUT_DIR}/*.pb.h
        ${PROTO_OUTPUT_DIR}/*.pb.cc
        )
find_package(absl)
find_package(utf8_range)

add_executable(proto_test src/proto_test.cpp ${contacts_All})
target_link_libraries(proto_test
        ${Protobuf_LIBRARIES}

        /usr/local/lib/libutf8_range.a
        /usr/local/lib/libutf8_validity.a

        absl::bad_any_cast_impl
        absl::bad_optional_access
        absl::bad_variant_access
        absl::base
        absl::city
        absl::civil_time
        absl::cord
        absl::cord_internal
        absl::cordz_functions
        absl::cordz_handle
        absl::cordz_info
        absl::cordz_sample_token
        absl::crc32c
        absl::crc_cord_state
        absl::crc_cpu_detect
        absl::crc_internal
        absl::debugging_internal
        absl::demangle_internal
        absl::die_if_null
        absl::examine_stack
        absl::exponential_biased
        absl::failure_signal_handler
        absl::flags
        absl::flags_commandlineflag
        absl::flags_commandlineflag_internal
        absl::flags_config
        absl::flags_internal
        absl::flags_marshalling
        absl::flags_parse
        absl::flags_private_handle_accessor
        absl::flags_program_name
        absl::flags_reflection
        absl::flags_usage
        absl::flags_usage_internal
        absl::graphcycles_internal
        absl::hash
        absl::hashtablez_sampler
        absl::int128
        absl::kernel_timeout_internal
        absl::leak_check
        absl::log_entry
        absl::log_flags
        absl::log_globals
        absl::log_initialize
        absl::log_internal_check_op
        absl::log_internal_conditions
        absl::log_internal_format
        absl::log_internal_globals
        absl::log_internal_log_sink_set
        absl::log_internal_message
        absl::log_internal_nullguard
        absl::log_internal_proto
        absl::log_severity
        absl::log_sink
        absl::low_level_hash
        absl::malloc_internal
        absl::periodic_sampler
        absl::random_distributions
        absl::random_internal_distribution_test_util
        absl::random_internal_platform
        absl::random_internal_pool_urbg
        absl::random_internal_randen
        absl::random_internal_randen_hwaes
        absl::random_internal_randen_hwaes_impl
        absl::random_internal_randen_slow
        absl::random_internal_seed_material
        absl::random_seed_gen_exception
        absl::random_seed_sequences
        absl::raw_hash_set
        absl::raw_logging_internal
        absl::scoped_set_env
        absl::spinlock_wait
        absl::stacktrace
        absl::status
        absl::statusor
        absl::strerror
        absl::str_format_internal
        absl::strings
        absl::strings_internal
        absl::symbolize
        absl::synchronization
        absl::throw_delegate
        absl::time
        absl::time_zone
        )





student.proto

syntax = "proto3";
package student;

// 定义联系人message
message StudentInfo {
  string name = 1;
  bool isMale = 2;
  int32 age = 3;
}

student.pb.cc和student.pb.h 是用cmake生成的

proto_test.cpp文章来源地址https://www.toymoban.com/news/detail-502998.html

#include <iostream>
#include "student.pb.h"

#include <google/protobuf/compiler/plugin.h>

int main(int argc,char** argv) {
    std::string data_str;

    {
//         使⽤ PB 进⾏序列化,并将结果打印出来。
        student::StudentInfo _student;
        _student.set_name("小豪豪");
        _student.set_ismale(true);
        _student.set_age(20);

        if (!_student.SerializeToString(&data_str)) {
            std::cerr << "序列化_student失败!" << std::endl;
            return -1;
        }
        std::cout << "序列化_student成功,结果:" << data_str << std::endl;
    }

    {
        // 使⽤ PB 进⾏反序列,解析出联系⼈信息并打印出来。
        student::StudentInfo _student;
        if (!_student.ParseFromString(data_str)) {
            std::cerr << "反序列化失败!" << std::endl;
            return -1;
        }
        std::cout << "反序列化成功!" << std::endl;
        std::cout << "name:" << _student.name() << std::endl;
        std::cout << "ismale:" << _student.ismale() << std::endl;
        std::cout << "age:" << _student.age() << std::endl;
    }

    return 0;
} //
// Created by hao on 2023/6/26.
//

到了这里,关于ubuntu22.04安装使用 protobuf 23.3静态库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Ubuntu22.04配置静态ip

    老规矩 - 上官网链接 为修改的文件内容如下 cat vim /etc/netplan/00-network-manager-all.yaml 修改对应文件 sudo vim /etc/netplan/00-network-manager-all.yaml

    2024年02月22日
    浏览(56)
  • Ubuntu 22.04版本设置静态IP

    在Ubuntu 20.04中设置静态IP的步骤如下: 打开终端并输入以下命令以编辑网络配置文件: 文件中应该有以下内容: 其中“enp0s3”是网卡的名称 将内容替换为: 保存并关闭文件。 输入以下命令以应用更改: 确认静态ip是否设置成功:

    2024年02月13日
    浏览(49)
  • Ubuntu 22.04配置静态IP地址

    1、查看ip地址网卡名称:ifconfig 2、编辑网卡配置文件:sudo vim /etc/netplan/01-network-manager-all.yaml 默认样式: network:         version: 2         renderer: NetworkManager  3、修改为: network:         ethernets:                 enp7s0:                         dhcp4: no                

    2024年02月03日
    浏览(57)
  • Ubuntu 22.04安装使用easyconnect

    百度百科,EasyConnect能够帮助您在办公室之外使用公司内网的所有系统及应用。在您的公司部署深信服远程应用发布解决方案后,您的公司所有业务系统及应用都可以轻松迁移至移动互联网上。您可以通过手机、PAD等智能移动终端随时随地开展您的业务,尽享移动业务带来的

    2024年01月17日
    浏览(43)
  • Ubuntu22.04网络配置,静态IP配置

    Ubuntu22.04网络配置,静态IP配置 或

    2024年02月15日
    浏览(55)
  • Ubuntu22.04 设置静态 IP 的方法

    通常,在大多数网络配置中,IP 地址由路由器 DHCP 服务器动态分配。在不同情况下可能需要设置静态 IP 地址,例如配置端口转发或运行媒体服务器 。 为 LAN 上的设备分配静态 IP 地址最简单且推荐的方法,是在路由器上配置静态 DHCP。静态 DHCP 或 DHCP 预留是大多数路由器上的

    2024年03月25日
    浏览(69)
  • [Ubuntu 22.04] Docker安装及使用

    使用脚本自动安装 安装完成后验证 1. 拉取镜像并启动容器 注 :OPTION是参数,TAG是标签(版本号) 以Ubuntu 20.04为例,如下: 2. 创建容器 镜像拉取完成后,可以使用以下命令创建并启动一个基于 Ubuntu 20.04 镜像的容器 这将创建一个交互式的终端会话,可以在 Ubuntu 20.04 容器内

    2024年01月17日
    浏览(48)
  • WSL安装与使用(Ubuntu22.04)

    本文主要记录Windows WSL的安装和使用过程,内容包括WSL安装过程、WSL安装Ubuntu、Ubuntu更换镜像源,Ubuntu安装Dcoker并配置等步骤。 Windows Subsystem for Linux(简称WSL)是一个在Windows 1011上能够运行原生Linux二进制可执行文件(ELF格式)的兼容层。它是由微软与Canonical公司合作开发,

    2024年02月08日
    浏览(48)
  • Ubuntu22.04配置静态IP-网关-DNS

    要在Ubuntu系统中配置网络,可以通过以下步骤进行操作: 1.打开终端:可以使用“Ctrl+Alt+T”快捷键打开终端,或者从应用程序菜单中找到“终端”。 2.检查网络接口:输入以下命令检查当前系统中的网络接口列表: 接口列表将显示在终端中。常见的接口名称可能包括\\\"eth0\\\"、

    2024年02月13日
    浏览(65)
  • 在Ubuntu 22.04上配置静态IP地址

    在Ubuntu 22.04上配置静态IP地址需要进行以下步骤: 打开终端:在桌面上,按下 Ctrl + Alt + T 组合键,或者在应用程序搜索栏中键入“终端”。 编辑网络配置文件:使用文本编辑器(例如 nano 或 vim )打开网络配置文件。在终端中,输入以下命令以使用 nano 编辑器打开配置文件:

    2024年02月11日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包