Linux上搭建百度brpc框架
来源:互联网 发布:自定义 仅安装windows 编辑:程序博客网 时间:2024/06/05 10:42
由于平常用的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进入目录。然后根据以下步骤:
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 valueclang: error: linker command failed with exit code 1 (use -v to see invocation)
所以需要把gflags生成动态库!生成动态库的方法从网上找了很久,几乎都是说上面那种方法但我一直生成不了动态库,最后找到了一个方法,可以生成gflags动态库和更改命名空间,解决!:
mkdir build && cd buildcmake -DCMAKE_INSTALL_PREFIX=/usr/local -DBUILD_SHARED_LIBS=ON -DGFLAGS_NAMESPACE=google ../ 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 valueclang: 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 --nodebugsymbolsmake
到这一步就结束啦,会在目录生成一个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:然后
cmakemake clientmake server
就可以了,然后运行./client和./server即可。运行效果:
服务端:
客户端:
- Linux上搭建百度brpc框架
- 百度开源RPC框架brpc
- 百度正式开源其RPC框架brpc
- linux上搭建mysql
- Linux上搭建Jenkins
- linux上搭建typecho
- Linux上搭建tomcat
- Linux SPI框架(上)
- Linux IIC框架(上)
- Linux SPI框架(上)
- Linux SPI框架(上)
- Linux SPI框架(上)
- Linux SPI框架(上)
- Linux之百度云服务器搭建
- CentOS上搭建Scrapy爬虫框架
- 将界面搭建在页面框架上
- 在eclipse 上搭建ssh框架
- Maven下SSM框架搭建-上
- Delphi开发Android使用wxsqlite3为数据库加密
- (7)onetomany双向:CURD
- 用100元换10元、5元和1元的纸币共50张,能换各种纸币多少张。
- 单反相机的价格变化一例
- 嵌套循环
- Linux上搭建百度brpc框架
- Docker创建自己需求的镜像
- avalon1与avalon2的异同
- 获取主机信息
- 详解用Navicat工具将Excel中的数据导入Mysql中
- 一幅图对比软件开发框架
- 向OOP和C++转变,采用策略
- Dubbo标签无法识别问题
- JSP概述、指令、内置对象,EL表达式