linux下安装protobuf教程+示例(详细)

(.pb.h:9:42: fatal error: google/protobuf/stubs/common.h: No such file or directory

看这个就应该知道是没有找到头文件,那么可以使用g++ 的-I 参数:
-I/usr/local/lib/protobuf/include来命令g++在/usr/local/lib/protobuf下查找头文件
以上/usr/local/lib/protobuf/是我的protobuf的安装地址,请替换成你的

)

1 在网站 http://code.google.com/p/protobuf/downloads/list上可以下载 Protobuf 的源代码。然后解压编译安装便可以使用它了。

安装步骤如下所示:

tar -xzf protobuf-2.1.0.tar.gz

cd protobuf-2.1.0

./configure --prefix=/usr/local/protobuf

make

make check

make install

2 > sudo vim /etc/profile

添加

export PATH=$PATH:/usr/local/protobuf/bin/

export PKG_CONFIG_PATH=/usr/local/protobuf/lib/pkgconfig/

保存执行

source /etc/profile

同时 在~/.profile中添加上面两行代码,否则会出现登录用户找不到protoc命令

3 > 配置动态链接库路径

sudo vim /etc/ld.so.conf

插入:

/usr/local/protobuf/lib

4 > su  #root 权限

ldconfig

5> 写消息文件:msg.proto

  1. package lm;
  2. message helloworld
  3. {
  4. required int32     id = 1;  // ID
  5. required string    str = 2;  // str
  6. optional int32     opt = 3;  //optional field
  7. }

将消息文件msg.proto映射成cpp文件

protoc -I=. --cpp_out=. msg.proto

可以看到生成了

msg.pb.h 和msg.pb.cc

6> 写序列化消息的进程

write.cc

  1. #include "msg.pb.h"
  2. #include <fstream>
  3. #include <iostream>
  4. using namespace std;
  5. int main(void)
  6. {
  7. lm::helloworld msg1;
  8. msg1.set_id(101);
  9. msg1.set_str("hello");
  10. fstream output("./log", ios::out | ios::trunc | ios::binary);
  11. if (!msg1.SerializeToOstream(&output)) {
  12. cerr << "Failed to write msg." << endl;
  13. return -1;
  14. }
  15. return 0;
  16. }

编译 write.cc

g++  msg.pb.cc write.cc -o write  `pkg-config --cflags --libs protobuf` -lpthread

执行write

./write, 可以看到生成了log文件

7> 写反序列化的进程

reader.cc

  1. #include "msg.pb.h"
  2. #include <fstream>
  3. #include <iostream>
  4. using namespace std;
  5. void ListMsg(const lm::helloworld & msg) {
  6. cout << msg.id() << endl;
  7. cout << msg.str() << endl;
  8. }
  9. int main(int argc, char* argv[]) {
  10. lm::helloworld msg1;
  11. {
  12. fstream input("./log", ios::in | ios::binary);
  13. if (!msg1.ParseFromIstream(&input)) {
  14. cerr << "Failed to parse address book." << endl;
  15. return -1;
  16. }
  17. }
  18. ListMsg(msg1);
  19. }

编译:g++  msg.pb.cc reader.cc -o reader  `pkg-config --cflags --libs protobuf` -lpthread

执行./reader 输出 :

101

hello

8> 写Makefile文件

    1. all: write reader
    2. clean:
    3. rm -f write reader msg.*.cc msg.*.h *.o  log
    4. proto_msg:
    5. protoc --cpp_out=. msg.proto
    6. write: msg.pb.cc write.cc
    7. g++  msg.pb.cc write.cc -o write  `pkg-config --cflags --libs protobuf`
    8. reader: msg.pb.cc reader.cc
    9. g++  msg.pb.cc reader.cc -o reader  `pkg-config --cflags --libs protobuf`
时间: 2024-08-07 02:04:16

linux下安装protobuf教程+示例(详细)的相关文章

linux下安装redmine2.5.1详细步骤

yum install -y gcc-c++ patch readline readline-devel zlib zlib-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf automake libtool bison iconv-devel yum install mysql-devel 安装rvm curl -L get.rvm.io | bash -s stable source /etc/profile

linux下安装protobuf及cmake编译

一.protobuf 安装 protobuf版本:2.6.1 下载地址:https://github.com/google/protobuf/archive/v2.6.1.zip 解压之后进入目录 修改autogen.sh echo "Google Test not present. Fetching gtest-1.5.0 from the web..." curl http://googletest.googlecode.com/files/gtest-1.5.0.tar.bz2

linux下安装mysql5.7.25详细教程

前言 最近项目上线,开始给用户测试了.搞下来好多台服务器,自然要装一个mysql的服务器.想想广大博友应该都会遇到如何装mysql的问题,就此分享,给大家一个安装指南.供大家以后安装的时候,提高效率,瞬间完事. 准备工作 当然是准备一个mysql5.7.25的tar包啦!自行百度下载吧!留言找我要也行! 安装步骤 检查是否有老版本的mysql 检查是否有老版本 rpm -qa | grep mysql 输入后,没有任何信息弹出,证明机器上没有老版本的mysql.如果有,就会展示出mysql的版本

linux下安装配置JDK,详细步骤图文

1.复制jdk到安装目录 (1)假设jdk安装文件在桌面,我们指定的安装目录是:/usr/local/java .可是系统安装后在/usr/local下并没有java目录,这需要我们去创建一个java文件夹,如图(1) (2)切换到桌面下,执行复制,如图(2) 2.安装jdk (1)切换到root用户下,如图(3) (注:如果因忘记密码而认证失败,可以先修改root用户的密码,再执行第(1)步,修改root用户密码如图(4)) (2)运行jdk-6u30-linux-i586.bin,如图(5)

Linux 下安装Redis教程

第一部分:安装redis 希望将redis安装到此目录  1 /usr/local/redis 希望将安装包下载到此目录 1 /usr/local/src 那么安装过程指令如下: 1 2 3 4 5 6 7 $ mkdir /usr/local/redis   $ cd /usr/local/src   $ wget http://redis.googlecode.com/files/redis-2.6.14.tar.gz   $ tar xzf redis-2.6.14.tar.gz    $

linux下安装protobuf

在root权限下执行: 1.网上下载protobuf-2.5.0.tar.gz 2.解压缩 tar zxvf protobuf-2.5.0.tar.gz 3.cd protobuf-2.5.0 4../configure --prefix=/usr/local/protobuf 5.make 6.make check 7.make install 8.ln -sf /usr/local/protobuf/bin/protoc /usr/bin/protoc 9.执行protoc --versio

Linux下安装Nginx教程

什么是Nginx? Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器,在高连接并发的情况下Nginx 是 Apache 服务器不错的替代品.其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好.目前中国大陆使用nginx网站用户有:新浪.网易. 腾讯,另外知名的微网志Plurk也使用nginx. Nginx 作为 负载均衡 服务器: Nginx 既可以在内部直

Linux下安装GB2312的示例

Step 1: 到Linux字符集的安装包目录下  [cd /usr/share/i18n/charmaps] Step 2: 解压该目录下的GB2312.gz  [gunzip GB2312.gz] Step 3: 安装字符集    [localedef -f GB2312   -i zh_CN /usr/lib/locale/zh_CN.GB2312]

nginx 新手攻略 Ubuntu Linux下安装配置教程

能提供各种服务端管理工具包的极客们,请联系我,将给予ftp上传权限,墙内太坑了 下载gzip 模块需要 zlib 库 囧囧明主机zlib:  wget ftp://www.xuwenming.net/nginx/zlib-1.2.8.tar.gz --ftp-user=ftp1 --ftp-password=ftp1 官方zlib: wget http://liquidtelecom.dl.sourceforge.net/project/libpng/zlib/1.2.8/zlib-1.2.8.