在centos 6.9下Protocol Buffers数据传输及存储协议的使用(python)
我们知道Protocol Buffers是Google定义的一种跨语言、跨平台、可扩展的数据传输及存储的协议,因为将字段协议分别放在传输两端,传输数据中只包含数据本身,不需要包含字段说明,所以传输数据量小,解析效率高。感兴趣的可以访问https://developers.google.com/protocol-buffers/docs/overview。Protocol Buffers官方只支持C++, Java, Python, C#, Go, PHP。
检查基础环境
1.检查centos下的软件,如果没有就用yum安装:
autoconf
automake
libtool
curl (used to download gmock)
make
g++
unzip
python版本升级
1.检查python版本和对应的pip,因为protobuf官方的例子中python是2.7以上的,而centos 6.9自带的是2.6的,所以需要升级:
cd ~
wget http://python.org/ftp/python/2.7.4/Python-2.7.4.tgz
tar -xvf Python-2.7.4.tgz
cd Python-2.7.4
./configure --prefix=/usr/local/python2.7
make check
make
make install
创建软连接来使系统默认python变为python2.7
mv /usr/bin/python /usr/bin/python.old
ln -s /usr/local/python2.7/bin/python2.7 /usr/bin/python
python -v
修改yum配置(否则yum可能)
vim /usr/bin/yum
将第一行的#!/usr/bin/python修改为系统原有的python版本地址#!/usr/bin/python2.6
至此CentOS 6.9系统Python已成功升级至2.7.4版本
python 2.7 下安装pip
1.下载pip安装shell文件
cd ~
wget https://bootstrap.pypa.io/get-pip.py
yum install setuptool zlib* -y
python get-pip.py
2.创建软连接(否则会报错提示名称不存在)
mv /usr/bin/pip /usr/bin/pip.old
ln -s /usr/local/python2.7/bin/pip /usr/bin/pip
pip -V
至此pip安装完成!
升级GCC版本(待完善)
centos自动gcc为4.4.7,对于文件protoc编译安装是不能通过的,一次需要升级到4.8.2以上,以支持C++11。
cd ~
wget http://ftp.gnu.org/gnu/gcc/gcc-6.1.0/gcc-6.1.0.tar.gz
tar -zvxf gcc-6.1.0.tar.gz --directory=/usr/local/
cd /usr/local/gcc-6.1.0
./contrib/download_prerequisites
mkdir build && cd build
../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
make && make install
可能出现问题:源码编译升级安装了gcc后,编译程序或运行其它程序时,有时会出现类似/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found的问题。这是因为升级gcc时,生成的动态库没有替换老版本gcc的动态库导致的,将gcc最新版本的动态库替换系统中老版本的动态库即可解决。(参考:https://www.linuxidc.com/Linux/2017-10/147621.htm)
1.问题分析:
运行以下命令检查动态库:
strings /usr/lib64/libstdc++.so.6 | grep GLIBC
输出结果如下:
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.4
GLIBC_2.3.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
从以上输出可以看出,gcc的动态库还是旧版本的。说明出现这些问题,是因为升级gcc时,生成的动态库没有替换老版本gcc的动态库。
2. 问题处理
执行以下命令,查找编译gcc时生成的最新动态库:
find / -name "libstdc++.so*"
输出如下:
/usr/lib/gcc/x86_64-redhat-linux/4.4.4/32/libstdc++.so
/usr/lib/gcc/x86_64-redhat-linux/4.4.4/libstdc++.so
/usr/lib64/libstdc++.so.6.0.13
/usr/lib64/libstdc++.so.6
/usr/share/gdb/auto-load/usr/lib/libstdc++.so.6.0.13-gdb.pyc
/usr/share/gdb/auto-load/usr/lib/libstdc++.so.6.0.13-gdb.pyo
/usr/share/gdb/auto-load/usr/lib/libstdc++.so.6.0.13-gdb.py
/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.13-gdb.pyc
/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.13-gdb.pyo
/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.13-gdb.py
/usr/local/gcc6.1.0/lib64/libstdc++.so.6.0.22
/usr/local/gcc6.1.0/lib64/libstdc++.so
/usr/local/gcc6.1.0/lib64/libstdc++.so.6.0.22-gdb.py
/usr/local/gcc6.1.0/lib64/libstdc++.so.6
/opt/gcc-6.1.0/gcc-build-6.1.0/stage1-x86_64-linux/libstdc++-v3/src/.libs/libstdc++.so.6.0.22 //最新动态库
/opt/gcc-6.1.0/gcc-build-6.1.0/stage1-x86_64-linux/libstdc++-v3/src/.libs/libstdc++.so
/opt/gcc-6.1.0/gcc-build-6.1.0/stage1-x86_64-linux/libstdc++-v3/src/.libs/libstdc++.so.6
/opt/gcc-6.1.0/gcc-build-6.1.0/prev-x86_64-linux/libstdc++-v3/src/.libs/libstdc++.so.6.0.22
/opt/gcc-6.1.0/gcc-build-6.1.0/prev-x86_64-linux/libstdc++-v3/src/.libs/libstdc++.so
/opt/gcc-6.1.0/gcc-build-6.1.0/prev-x86_64-linux/libstdc++-v3/src/.libs/libstdc++.so.6
/opt/gcc-6.1.0/gcc-build-6.1.0/x86_64-linux/libstdc++-v3/src/.libs/libstdc++.so.6.0.22
/opt/gcc-6.1.0/gcc-build-6.1.0/x86_64-linux/libstdc++-v3/src/.libs/libstdc++.so
/opt/gcc-6.1.0/gcc-build-6.1.0/x86_64-linux/libstdc++-v3/src/.libs/libstdc++.so.6
……
/home/gcc-5.2.0/gcc-temp是升级gcc时的输出目录。
将上面的最新动态库libstdc++.so.6.0.21复制到/usr/lib64目录下:
cp /opt/gcc-6.1.0/gcc-build-6.1.0/stage1-x86_64-linux/libstdc++-v3/src/.libs/libstdc++.so.6.0.22 /usr/lib64
复制后,修改系统默认动态库的指向,即:重建默认库的软连接。
切换工作目录至/usr/lib64:
cd /usr/lib64
备份原来软连接:
mv libstdc++.so.6 libstdc++.so.6.old
将默认库的软连接指向最新动态库:
ln -s libstdc++.so.6.0.22 libstdc++.so.6
默认动态库升级完成。重新运行以下命令检查动态库:
strings /usr/lib64/libstdc++.so.6 | grep GLIBC
现在输出如下:
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBC_2.3
GLIBC_2.2.5
GLIBC_2.3.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
protobuf安装
1.安装protoc编译器:
到查找 https://github.com/google/protobuf/releases/ (注意选择版本)
cd ~
wget https://github-production-release-asset-2e65be.s3.amazonaws.com/23357588/fba5d776-940f-11e8-88d0-a303c1188d2f?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20190312%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20190312T075947Z&X-Amz-Expires=300&X-Amz-Signature=e57b91ea0140f33e366adf63c67bb597a4a18e8ef96182a0ca98c283008d6710&X-Amz-SignedHeaders=host&actor_id=20057157&response-content-disposition=attachment%3B%20filename%3Dprotobuf-all-3.6.1.tar.gz&response-content-type=application%2Foctet-stream
tar -xvf protobuf-all-3.6.1.tar.gz
cd protibuf-3.6.1
# 指定安装路径
./configure --prefix=/usr/local/protobuf
# 测试,这一步很耗时间
make check
make && make install
如何编译不通过,需要升级gcc到新版,同时升级so库,可以参考:https://www.linuxidc.com/Linux/2017-10/147621.htm
查看版本:
/usr/local/bin/protoc --version
libprotoc 3.6.1
继续安装protobuf的python模块(如果不用python,可跳过这一步)
cd ./python
python setup.py build
python setup.py test
python setup.py install
在centos 6.9下Protocol Buffers数据传输及存储协议的使用(python)的更多相关文章
- Protocol Buffers数据传输及存储协议简单使用
我们知道Protocol Buffers是Google定义的一种跨语言.跨平台.可扩展的数据传输及存储的协议,因为将字段协议分别放在传输两端,传输数据中只包含数据本身,不需要包含字段说明,所以传输数据 ...
- Centos 6.8 安装 Protocol Buffers , v3.2.0有 BUG ,安装 3.1.0
Centos 6.8 安装 Protocol Buffers , v3.2.0有 BUG ,安装 3.1.0 切换到用户目录 cd ~ 安装 python2.7,须加入zlib wget http ...
- CentOS 6.4 下 Python 2.6 升级到 2.7
一开始有这个需求,是因为用 YaH3C 替代 iNode 进行校园网认证时,CentOS 6.4下一直编译错误,提示找不到 Python 的某个模块,百度了一下,此模块是在 Python2.7 以上才 ...
- Centos 6.5下一个SNMP简单配置(snmp protocol v3,监控宝)
Centos 6.5下一个SNMP简单配置(snmp protocol v3.监控宝) jom_ch@2014/7/25 1,安装 >yum -y install net-snmp net-sn ...
- Ubuntu 14.04 下 安装Protocol Buffers
参考: Protocol Buffers - Google's data interchange format Ubuntu 14.04 下 安装Protocol Buffers 环境 Ubuntu ...
- ProtoBuf3语法指南(Protocol Buffers)_下
0.说明 ProtoBuf3语法指南, 又称为proto3, 是谷歌的Protocol Buffers第3个版本. 本文基于官方英文版本翻译, 加上了自己的理解少量修改, 一共分为上下两部分. 1.A ...
- Xml,Json,Hessian,Protocol Buffers序列化对比
简介 这篇博客主要对Xml,Json,Hessian,Protocol Buffers的序列化和反序列化性能进行对比,Xml和Json的基本概念就不说了. Hessian:Hessian是一个轻量级的 ...
- configure: error: cannot find protoc, the Protocol Buffers compiler
centos 6 安装mosh 1.2 2012-05-07 17:21:41标签:centos mosh 关于mosh(引用于) 芬兰研究员Tatu Ylönen于1995年设计出最早的SSH协议, ...
- Protocol Buffers
今天来介绍一下"Protocol Buffers"(以下简称protobuf)这个玩意儿.本来俺在构思"生产者/消费者模式"系列的下一个帖子:关于生产者和消费者 ...
随机推荐
- Fibonacci----poj3070(矩阵快速幂, 模板)
题目链接:http://poj.org/problem?id=3070 . 就是斐波那契的另一种表示方法是矩阵的幂: 所以是矩阵快速幂:矩阵快速幂学习 #include <cstdio> ...
- Linux时间管理涉及数据结构和传统低分辨率时钟的实现
上篇文章大致描述了Linux时间管理的基本情况,看了一些大牛们的博客感觉自己写的内容很匮乏,但是没办法,只能通过这种方式提升自己……闲话不说,本节介绍下时间管理下重要的数据结构 设备相关数据结构 // ...
- 设计模式中类的关系UML
在java以及其他的面向对象设计模式中,类与类之间主要有6种关系,他们分别是:依赖.关联.聚合.组合.继承.实现.他们的耦合度依次增强. 1. 依赖(Dependence) 依赖关系的定义为:对于两 ...
- neutron ml2
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zhoumingbo532/article/details/27964675 在介绍ml2之前,先介绍 ...
- Linux系统性能调优之性能分析
1.Linux性能分析的目的1)找出系统性能瓶颈(包括硬件瓶颈和软件瓶颈):2)提供性能优化的方案(升级硬件?改进系统系统结构?):3)达到合理的硬件和软件配置:4)使系统资源使用达到最大的平衡.(一 ...
- SDUT2857:艺术联合会(简单dp)
链接: http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2857 题目解析: 这是去年校赛的题目, ...
- 20165324 《Java程序设计》 第六周
学号 2016-2017-2 <Java程序设计>第六周学习总结 教材学习内容总结 第八章 常用实用类 String类 构造String对象:常量对象:String对象:引用String常 ...
- 如何使用别人的代码 (特指在MFC里面 或者推广为C++里面)
别人写了一堆代码,给了你源代码.在C++里面 应该是 头文件(.h)和源文件(.cpp). 那么我们如何使用他们呢?? 第一步:将其包含进来 如下图 ,不论是头文件还是源文件都如此 第二步:告诉 ...
- AngularJS 笔记系列(四)控制器和表达式
控制器:在 Angular 中控制器是一个函数,用来向作用域中添加额外的功能.我们用它来给作用域对象设置初始状态,并添加自定义行为. 使用方法: var app = angualr.module('a ...
- HTML5游戏开发系列教程7(译)
原文地址:http://www.script-tutorials.com/html5-game-development-lesson-7/ 今天我们将完成我们第一个完整的游戏--打砖块.这次教程中,将 ...