Linux上搭建百度brpc框架
2017-11-12 15:28
211 查看
由于平常用的rpc都是用thrift,百度开源brpc后想知道两者的差异是什么,所以就急切的从github上下载研究研究,发现文档写的是真的好~~当然还有里面的例子。研究了几天后,想搭好环境实现一波,搭好之后想把过程遇到的坑分享出来~
随便说下,我的是centos7的版本,ubutun也差不多。
一、brpc依赖三个开源库:是gflags,protobuf和leveldb。gflags是用于像Linux命令行那样指定参数的,protobuf用于序列和反序列化以及它的 rpc定义。leveldb用来压缩的。
1:安装gflags。使用命令 git clone https://github.com/gflags/gflags.git 下载好源文件,cd进入目录。然后根据以下步骤:
这里会有一个问题,这样生成的gflags库是生成静态库,即libgflags.a和libgflags_nothreads.a,但编译brpc时需要的是gflags的动态库!用静态库编译brpc会出现以下错误(stackoverflow上还说下述这种错误是因为命名空间改了的原因):
所以需要把gflags生成动态库!生成动态库的方法从网上找了很久,几乎都是说上面那种方法但我一直生成不了动态库,最后找到了一个方法,可以生成gflags动态库和更改命名空间,解决!:
2:安装protobuf。这 个很简单,没遇到什么坑,只需要
git clone https://github.com/google/protobuf.git
然后 :
会生成动态和静态库,头文件在/usr/local/include,库文件在/usr/local/lib
3:安装leveldb。先下载源文件:
git clone https://github.com/google/leveldb.git
进入目录:
只需要make命令,会生成两个文件夹,一个是out-shared文件夹里边是动态库,另一个是out-static文件夹里面是静态库。
brpc编译时也是用的leveldb的动态库!不是静态库,需要把out-shared里的.so文件拷贝到/usr/local/lib(因为喜欢把开源库拷贝到这个文件夹。。。)。
否则会出现以下错误:
二、前面把brpc三个依赖的库环境搭好啦,接下来就是编译brpc了,后面就简单了:
到这一步就结束啦,会在目录生成一个output文件夹,里有三个文件夹:bin 、include 和lib,里面包含着头文件和库文件,可以直接用啦。bin里面包含着文件 现在还不知道,正在学习中~~,如下图:
以echo_c++为例来使用brpc库:
1:首先通过protoc来编译.proto文件。
会在本目录下生成echo.pb.h和echo.pb.cc文件。
2:client.cpp和server.cpp里需要改下命名空间,原代码里是:
改成:
3:CMakeLists.txt内容:
4:然后
就可以了,然后运行./client和./server即可。运行效果:
服务端:
客户端:
随便说下,我的是centos7的版本,ubutun也差不多。
一、brpc依赖三个开源库:是gflags,protobuf和leveldb。gflags是用于像Linux命令行那样指定参数的,protobuf用于序列和反序列化以及它的 rpc定义。leveldb用来压缩的。
1:安装gflags。使用命令 git clone https://github.com/gflags/gflags.git 下载好源文件,cd进入目录。然后根据以下步骤:
mkdir build && cd build cmake .. make make install
这里会有一个问题,这样生成的gflags库是生成静态库,即libgflags.a和libgflags_nothreads.a,但编译brpc时需要的是gflags的动态库!用静态库编译brpc会出现以下错误(stackoverflow上还说下述这种错误是因为命名空间改了的原因):
/usr/bin/ld: /usr/local/lib/libgflags.a(gflags.cc.o): relocation R_X86_64_32S against `.rodata' can not be used when making a shared object; recompile with -fPIC /usr/local/lib/libgflags.a: error adding symbols: Bad value clang: error: linker command failed with exit code 1 (use -v to see invocation)
所以需要把gflags生成动态库!生成动态库的方法从网上找了很久,几乎都是说上面那种方法但我一直生成不了动态库,最后找到了一个方法,可以生成gflags动态库和更改命名空间,解决!:
mkdir build && cd build cmake -DCMAKE_INSTALL_PREFIX=/usr/local -DBUILD_SHARED_LIBS=ON -DGFLAGS_NAMESPACE=google ../< 4000 /span> make sudo make install
2:安装protobuf。这 个很简单,没遇到什么坑,只需要
git clone https://github.com/google/protobuf.git
然后 :
./autogen.sh ./configure $ make $ make check $ sudo make install
会生成动态和静态库,头文件在/usr/local/include,库文件在/usr/local/lib
3:安装leveldb。先下载源文件:
git clone https://github.com/google/leveldb.git
进入目录:
make
只需要make命令,会生成两个文件夹,一个是out-shared文件夹里边是动态库,另一个是out-static文件夹里面是静态库。
brpc编译时也是用的leveldb的动态库!不是静态库,需要把out-shared里的.so文件拷贝到/usr/local/lib(因为喜欢把开源库拷贝到这个文件夹。。。)。
否则会出现以下错误:
/usr/bin/ld: /usr/local/lib/libleveldb.a(db_impl.o): relocation R_X86_64_32S against `_ZTVN7leveldb2DBE' can not be used when making a shared object; recompile with -fPIC /usr/local/lib/libleveldb.a: error adding symbols: Bad value clang: error: linker command failed with exit code 1 (use -v to see invocation) make: *** [libbrpc.so] Error 1
二、前面把brpc三个依赖的库环境搭好啦,接下来就是编译brpc了,后面就简单了:
sh config_brpc.sh --headers=/usr/local/include --libs=/usr/local/lib --cxx=clang++ --cc=clang --nodebugsymbols make
到这一步就结束啦,会在目录生成一个output文件夹,里有三个文件夹:bin 、include 和lib,里面包含着头文件和库文件,可以直接用啦。bin里面包含着文件 现在还不知道,正在学习中~~,如下图:
以echo_c++为例来使用brpc库:
1:首先通过protoc来编译.proto文件。
protoc --cpp_out=. echo.proto
会在本目录下生成echo.pb.h和echo.pb.cc文件。
2:client.cpp和server.cpp里需要改下命名空间,原代码里是:
GFLAGS_NS::ParseCommandLineFlags(&argc, &argv, true);
改成:
google::ParseCommandLineFlags(&argc, &argv, true);
3:CMakeLists.txt内容:
cmake_minimum_required(VERSION 2.4.1) set (INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src /usr/local/include /yingongjun/myshare/opensoure/output/include) set(LIB_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib /usr/local/lib /yingongjun/myshare/opensoure/output/lib) add_compile_options(-std=c++11 -g) include_directories(${INCLUDE_DIR}) link_directories(${LIB_DIR}) add_executable(client client.cpp echo.pb.h echo.pb.cc) add_executable(server server.cpp echo.pb.h echo.pb.cc) target_link_libraries(client -lgflags -lbrpc -lprotobuf -lleveldb ) target_link_libraries(server -lgflags -lbrpc -lprotobuf -lleveldb ) set_target_properties(client PROPERTIES LINK_FLAGS -Wl,-rpath=/usr/local/lib)
4:然后
cmake make client make server
就可以了,然后运行./client和./server即可。运行效果:
服务端:
客户端:
相关文章推荐
- 百度RPC框架 BRPC 初体验
- 搭建PHP官方框架zend framework 2(LINUX)
- Linux/CentOS各种服务框架的搭建完整流程
- linux下搭建单机版hdfs和yarn框架
- dubbo之linux系统下搭建分布式服务框架
- Linux 搭建php扩展开发框架
- php开发框架 yii框架搭建(windows 和Linux)
- Spring + Dubbo + zookeeper (linux) 框架搭建
- Linux下单机版的beego框架的搭建
- Centos 下 C++ 百度开源框架 sofa-pbrpc环境搭建
- Linux/CentOS各种服务框架的搭建完整流程
- Linux(Ubuntu) 环境搭建,基本框架,总结(mongo副本集,redis...)
- Linux环境下搭建DeepNet深度学习框架
- 160719、Spring + Dubbo + zookeeper (linux) 框架搭建
- Linux系统下深度学习框架Keras的搭建
- LUCi框架普通linux搭建简易文档
- linux下eclipse (ee版)配置tomcat搭建javaweb框架
- linux下ejabberd框架搭建
- Linux 使用 tensorflow 框架搭建与实验
- 使用IDEA 4000 maven搭建SSM框架