Step1:
解压proto包,我是服务端代码都集成到了一个文件夹中,所以直接把整个文件夹上传。
Step2:
运行proto文件夹下的configure执行文件。./configure --prefix=/usr/local/protobuf
注意:--prefix 千万记得加,否则后续会出现问题。
问题:报错,内容为“bash . /configure permission denied”。
解决:如果改为执行 $ bash ./configure 就没问题了,为什么会出现这个问题呢?因为configure为可执行文件,相当于windows中的exe文件,不加以权限设置无法直接运行。所以需要在当前目录执行 $ chmod +x ./configure ,即为configure文件添加可执行性,然后通过 $ ./configure 即可以运行。
Step3:
make
make check
make install
Step4:
权限添加:vim /etc/profile
export PATH=$PATH:/usr/local/protobuf/bin/
export PKG_CONFIG_PATH=/usr/local/protobuf/lib/pkgconfig/
保存执行:source /etc/profile
Step5:
权限添加:vim
~/.profile
export PATH=$PATH:/usr/local/protobuf/bin/
export PKG_CONFIG_PATH=/usr/local/protobuf/lib/pkgconfig/
保存执行:source
~/.profile
Step6:
配置动态链接库路径:vim /etc/ld.so.conf
在后面插入这行代码:/usr/local/protobuf/lib
Step7:
ldconfig
Step8:
编写proto消息文件并编译
- package ProtoLogin;
- message ReqLogin
{
required string user_acount = 1;
required string user_passwd = 2;
}
将消息文件
login.proto映射成cc文件:protoc -I=. --cpp_out=. login.proto
如果看到这两个文件说明生成成功:login.pb.h 和login.pb.cc
Step9:
使用proto打包解包
- #include "login.pb.h"
- void CLogin::DatasProcess(char* pstMsgBody, int iBodyLen)
- {
- ProtoLogin::ReqLogin ReqLogin;
ReqLogin.ParseFromArray(pstMsgBody,iBodyLen);
std::string user_acount = ReqLogin.user_acount();
std::string user_passwd = ReqLogin.user_passwd();
- }
Step10:
makefile文件编写
- all: login.pb.o Login.o
-
login.pb.o: ./serverlogin/login.pb.cc ./serverlogin/login.pb.h
g++ -c ./serverlogin/login.pb.cc -o login.pb.o
Login.o: ./serverlogin/Login.cpp ./serverlogin/Login.h
g++ -c ./serverlogin/Login.cpp -o Login.o
- server: login.pb.o Login.o server
g++ login.pb.o Login.o server.cpp -o server `pkg-config --cflags --libs protobuf` -lpthread
clean:
rm *.o server
- g++
login.pb.o Login.o server.cpp -o server -L$(BASEDIR)/lib/protobuf-2.5.0-lib/ -lprotobuf -lpthread
- 其中$(BASEDIR)/lib/
是我自己工程的文件夹,在服务器上安装完成proto之后,把生成的libprotobuf.a拷贝到
-
$(BASEDIR)/lib/
下。
-
$(BASEDIR)/lib/
下。
- 其中$(BASEDIR)/lib/
是我自己工程的文件夹,在服务器上安装完成proto之后,把生成的libprotobuf.a拷贝到