Linux下protobuf 和 protobuf-c的安装及其外围知识

1. 简介:

ProtoBuf (Google Protocol Buffer)是由google公司用于数据交换的序列结构化数据格式,具有跨平台、跨语言、可扩展特性,类型于常用的XML及JSON,但具有更小的传输体积、更高的编码、解码能力,特别适合于数据存储、网络数据传输等对存储体积、实时性要求高的领域。以 .proto为后缀,有自己独立的编译器。

优点:空间效率和时间效率高,对于数据大小敏感,传输效率高的

缺点:消息结构可读性不高,序列化后的字节序列为二进制序列不能简单的分析有效性;目前使用不广泛

2. 安装过程:

2.1 首先安装protobuf

protobuf源码包下载路径:https://github.com/protocolbuffers/protobuf/releases

 当前最新的版本为3.19.4,这里我就选择下载最新版本的包,选择.tar.gz包下载,其他方式亦可。

#1.解压tar.gz包
tar zxvf protobuf-3.19.4.tar.gz

#2.进入解压后的目录完成编译和安装
cd protobuf-3.19.4
./configure --prefix=/usr/local/protobuf-3.19.4
make
sudo make install

#3.配置环境变量———即指定protobuf编译工具的路径
cd ~
vim .bashrc
#在.bashrc脚本中添加下面两行
export PATH="$PATH:/usr/local/protobuf-3.19.4/bin"
export PKG_CONFIG_PATH=/usr/local/protobuf-3.19.4/lib/pkgconfig
#保存并退出vim

#4.使对.bashrc文件的修改立即生效
source .bashrc

#5.指定protobuf动态库的路径
sudo vim /etc/ld.so.conf
#添加下面一行
/usr/local/protobuf/protobuf-3.19.4/lib

#6.使上面新指定的链接库立即生效
sudo ldconfig

 2.2 再安装protobuf-c

 protobuf-c源码包下载路径:https://github.com/protobuf-c/protobuf-c

当前最新版本为v1.4.0,我之前已经下好了v1.3.3版本,所以这直接就用v1.3.3版本好了

#1.解压.tar.gz源码包
tar zxf protobuf-c-1.3.3.tar.gz


#2.编译并安装
cd protobuf-c-1.3.3/
./configure --prefix=/usr/local/protobuf-c-1.3.3
make
sudo make install

#3.配置环境变量———即指定protobuf-c编译工具的路径
cd ~
vim .bashrc

#添加下面一行
export PATH="$PATH:/usr/protobuf-c-1.3.3/bin"


#4.使对.bashrc文件的修改立即生效
source .bashrc

#5.指定protobuf动态库的路径
sudo vim /etc/ld.so.conf
#添加下面一行
/usr/local/protobuf/protobuf-c-1.3.3/lib

#6.使上面新指定的链接库立即生效
sudo ldconfig

 2.3 确认完成安装

可以通过查看编译工具的版本来确认是否安装成功,如下便确认已经安装成功

3. 安装过程中可能遇到的问题

3.1 pkg-config too old

执行protobuf-c的./configure是可能会提示:configure: error: The pkg-config script could not be found or is too old

解决方法

(1)如果没有安装pkg-config,则:sudo apt-get install pkg-config

(2)如果系统自带版本过低,则可以:sudo apt upgrade pkg-config

3.2 "automake-xxx is missing on your system"

有的版本则可能会提示“aclocal-xxx is missing on your system”

道理一样,都是因为aclocal属于automake的一部分,它主要在执行makefile的时候指定文件放置的地方,会产生autom4te.cache和aclocal.m4这两个文件。(网上找到的aclocal和aotomaked的关系:http://www.adp-gmbh.ch/misc/tools/configure/aclocal.html,哪位大佬有更好的解释欢迎补充)。

也就是说protobuf-c-1.3.3源码编译的时候,automake会生成makefile,而其依赖的aclocal_xxx没有找到。所以直接报了automake_xxx或aclocal_xxx没有找到。

我们可以查看当前系统中的aclocal的版本:

这就说明我们系统中都还没有安装aclocal ,--version给出的提示安装默认版本,或者automake1.11版本,显然无法满足需要,我们需要automake1.16版本

解决方法:

sudo autoreconf -ivf

在执行sudo autoreconf -ivf的时候可能还会遇到其他的工具没有安装的情况,比如autoreconf本省没有安装、libtool-bin没有安装

 

 

 解决完所有问题后,protobuf-c执行sudo make install成功的结果如下:

 4. 知识拓展

4.1 环境变量配置文件

1. 环境变量

 变量是计算机系统用于保存可变值的数据类型,我们可以直接通过变量名称来提取到对应的变量值。在 Linux 系统中,环境变量是用来定义系统运行环境的一些参数,比如每个用户不同的家目录(HOME)。

 以我们最熟悉也是操作的最多的环境变量 "PATH" 为例,它的用途就是当用户要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下寻找此程序外,还要到PATH变量中指定的路径去寻找。

Linux系统中环境变量的名称一般都是大写

2. Linux系统中配置环境变量的3种方式

(1)修改家目录下的 ".bashrc"文件,此修改只针对当前用户有效(它为隐含文件,ls -a可见)

(2)修改 "/etc/profile" 文件,此修改修改的是系统的环境,对所有用户可见

(3)直接使用export定义环境变量,这种方式只针对当前shell的session有效

export PATH=$PATH:/opt/gcc-4.9-2016.02-x86_64_arm-linux-gnueabi/bin

 .bashrc 文件主要保存着当前用户的一些个性化设置,如:命令别名、环境变量等,甚至可以指定一个脚本以实现开机后自动调用(因为系统在初始化的时候会启动shell进程,shell启动的时候会执行.bahsrc)。使用此方式要比第二种方式更安全,不会给系统带来安全问题。

修改完成后如果想让修改立即生效,则需执行source命令来立即加载更改项,否则需系统重启后才生效。

source .bashrc       或     source /etc/profile

3.  查看环境变量 

4.2 Linux源码安装知识简单介绍

1. 介绍

Linux源码安装软件基本就是这3步:./configure,make, make install

一般源码包里都有"configure"这个配置脚本(如果没有可能需要执行某个操作来生成,源码包里可能有说明)./configure" 是Linux源码安装软件的第一步,主要的作用是对即将安装的软件进行配置,检查当前的环境是否满足要安装软件的依赖关系。它是autoconf的工具的基本应用。

2. --prefix

configure支持很多命令行选项,可以通过--help查看

其中:"./configure --prefix=/xxx" 的作用是:编译的时候用来指定程序存放路径 。如果不指定prefix:

1)可执行文件默认放在/usr /local/bin,

2)库文件默认放在/usr/local/lib,

3)配置文件默认放在/usr/local/etc。

4)其它的资源文件放在/usr /local/share。

比较散乱,而我们要编译的程也不是系统自带的,干脆集中放在自己定义的一个目录下,后期删除什么的都比较好管理(推荐)。

4.3 ldconfig

以下内容部分转载自https://blog.csdn.net/qq_38125626/article/details/83546323

ldconfig是一个动态链接库管理命令,为了让动态链接库为系统所共享,还需运行动态链接库的管理命令–ldconfig。 ldconfig 命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态 链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件.缓存文件默认为 /etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表.

linux下的共享库机制采用了类似于高速缓存的机制,将库信息保存在/etc/ld.so.cache里边。

程序连接的时候首先从这个文件里边查找,然后再到ld.so.conf的路径里边去详细找。

这就是为什么修改了ld.so.conf要重新运行一下ldconfig的原因。

也就是将动态连接库的路径告诉系统。

  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值