使用krpc
安装krpc基础环境以及编译krpc.
构建
krpc鼓励静态链接依赖,以便 于每个运行krpc服务的机器不必再安装依赖。
krpc有如下依赖:
- gflags: Extensively used to define global options.
- protobuf: Serializations of messages, interfaces of services.
- leveldb: Required by rpcz to record RPCs for tracing.
支持的环境
Ubuntu/LinuxMint/WSL
依赖准备
安装依赖:
sudo apt-get install -y git g++ make libssl-dev libgflags-dev libprotobuf-dev libprotoc-dev protobuf-compiler libleveldb-dev
如果你需要静态链接leveldb:
sudo apt-get install -y libsnappy-dev
如果你需要通过源码编译生成 leveldb 静态库:
git clone --recurse-submodules https://github.com/google/leveldb.git
mkdir -p build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_POSITION_INDEPENDENT_CODE=ON .. && cmake --build .
sudo cp -r ../include/leveldb /usr/include/ && sudo cp libleveldb.a /usr/lib/
如果你要在样例中启用cpu/heap的profiler:
sudo apt-get install -y libgoogle-perftools-dev
如果你要运行测试,那么要安装并编译libgtest-dev(它没有被默认编译):
sudo apt-get install -y cmake libgtest-dev && cd /usr/src/gtest && sudo cmake . && sudo make && sudo mv lib/libgtest* /usr/lib/ && cd -
gtest源码目录可能变动,如果/usr/src/gtest不存在,请尝试/usr/src/googletest/googletest。
使用config_krpc.sh编译krpc
git克隆krpc,进入到项目目录,然后运行
$ sh config_krpc.sh --headers=/usr/include --libs=/usr/lib
$ make
修改编译器为clang,添加选项--cxx=clang++ --cc=clang。
不想链接调试符号,添加选项--nodebugsymbols,然后编译将会得到更轻量的二进制文件。
使用glog版的krpc,添加选项--with-glog。
要启用 thrift 支持,首先安装thrift并且添加选项--with-thrift。
运行样例
$ cd example/echo_c++
$ make
$ ./echo_server &
$ ./echo_client
上述操作会链接krpc的静态库到样例中,如果你想链接krpc的共享库,请依次执行:make clean和LINK_SO=1 make
运行测试
$ cd test
$ make
$ sh run_tests.sh
使用cmake编译krpc
mkdir build && cd build && cmake .. && cmake --build . -j6
对于 cmake 3.13+ 也可以使用如下命令进行编译:
cmake -B build && cmake --build build -j6
要帮助VSCode或Emacs(LSP)去正确地理解代码,添加-DCMAKE_EXPORT_COMPILE_COMMANDS=ON选项去生成compile_commands.json。
要修改编译器为clang,请修改环境变量CC和CXX为clang和clang++。
不想链接调试符号,请移除build/CMakeCache.txt,然后用-DWITH_DEBUG_SYMBOLS=OFF选项执行cmake。
想要让krpc使用glog,用-DWITH_GLOG=ON选项执行cmake。
要启用 thrift 支持,先安装thrift,然后用-DWITH_THRIFT=ON选项执行cmake。
用cmake运行样例
$ cd example/echo_c++
$ cmake -B build && cmake --build build -j4
$ ./echo_server &
$ ./echo_client
上述操作会链接krpc的静态库到样例中,如果你想链接krpc的共享库,请先移除CMakeCache.txt,然后用-DLINK_SO=ON选项重新执行cmake。
运行测试
$ mkdir build && cd build && cmake -DBUILD_UNIT_TESTS=ON .. && make && make test
Fedora/CentOS
依赖准备
CentOS一般需要安装EPEL,否则很多包都默认不可用。
sudo yum install epel-release
安装依赖:
sudo yum install git gcc-c++ make openssl-devel gflags-devel protobuf-devel protobuf-compiler leveldb-devel
如果你要在样例中启用cpu/heap的profiler:
sudo yum install gperftools-devel
如果你要运行测试,那么要安装ligtest-dev:
sudo yum install gtest-devel
使用config_krpc.sh编译krpc
git克隆krpc,进入项目目录然后执行:
$ sh config_krpc.sh --headers="/usr/include" --libs="/usr/lib64 /usr/bin"
$ make
修改编译器为clang,添加选项--cxx=clang++ --cc=clang。
不想链接调试符号,添加选项--nodebugsymbols 然后编译将会得到更轻量的二进制文件。
想要让krpc使用glog,添加选项:--with-glog。
要启用 thrift 支持,先安装thrift,然后添加选项:--with-thrift。
运行样例
$ cd example/echo_c++
$ make
$ ./echo_server &
$ ./echo_client
上述操作会链接krpc的静态库到样例中,如果你想链接krpc的共享库,请依次执行:make clean和LINK_SO=1 make
运行测试
$ cd test
$ make
$ sh run_tests.sh
使用cmake编译krpc
参考这里
使用kmpkg编译krpc
kmpkg 是一个全平台支持的包管理器,你可以使用以下步骤kmpkg轻松编译krpc:
$ git clone https://gitee.com/kumo-pub/kmpkg.git
$ ./bootstrap-kmpkg.bat # 使用 powershell
$ ./bootstrap-kmpkg.sh # 使用 bash
$ ./kmpkg install krpc
自己构建依赖的Linux
依赖准备
krpc默认会构建出静态库和共享库,因此它也需要依赖有静态库和共享库两个版本。
以gflags为例,它默认不构建共享库,你需要给cmake指定选项去改变这一行为:
$ cmake . -DBUILD_SHARED_LIBS=1 -DBUILD_STATIC_LIBS=1
$ make
编译krpc
还以gflags为例,../gflags_dev表示gflags被克隆的位置。
git克隆krpc。进入到项目目录然后运行:
$ sh config_krpc.sh --headers="../gflags_dev /usr/include" --libs="../gflags_dev /usr/lib64"
$ make
这里我们给--headers和--libs传递多个路径使得脚本能够在多个地方进行检索。你也可以打包所有依赖和krpc一起放到一个目录中,然后把目录传递给 --headers/--libs选项,它会递归搜索所有子目录直到找到必须的文件。
修改编译器为clang,添加选项--cxx=clang++ --cc=clang。
不想链接调试符号,添加选项--nodebugsymbols,然后编译将会得到更轻量的二进制文件。
使用glog版的krpc,添加选项--with-glog。
要启用thrift 支持,首先安装thrift并且添加选项--with-thrift。
$ ls my_dev
gflags_dev protobuf_dev leveldb_dev krpc_dev
$ cd krpc_dev
$ sh config_krpc.sh --headers=.. --libs=..
$ make
使用cmake编译krpc
参考这里
MacOS
注意:在相同硬件条件下,MacOS版krpc的性能可能明显差于Linux版。如果你的服务是性能敏感的,请不要使用MacOS作为你的生产环境。
Apple Silicon
master HEAD已支持M1系列芯片,M2未测试过。欢迎通过issues向我们报告遗留的warning/error。
依赖准备
安装依赖:
brew install ./homebrew-formula/protobuf.rb
brew install openssl git gnu-getopt coreutils gflags leveldb
如果你要在样例中启用cpu/heap的profiler:
brew install gperftools
如果你要运行测试,需安装gtest。先运行brew install googletest看看homebrew是否支持(老版本没有),没有的话请下载和编译googletest:
git clone https://github.com/google/googletest -b release-1.10.0 && cd googletest/googletest && mkdir build && cd build && cmake -DCMAKE_CXX_FLAGS="-std=c++11" .. && make
在编译完成后,复制include/和lib/目录到/usr/local/include和/usr/local/lib目录中,以便于让所有应用都能使用gtest。
OpenSSL
Monterey中openssl的安装位置可能不再位于/usr/local/opt/openssl,很可能会在/opt/homebrew/Cellar目录下,如果编译时报告找不到openssl:
- 先运行
brew link openssl --force看看/usr/local/opt/openssl是否出现了 - 没有的话可以自行设置软链:
sudo ln -s /opt/homebrew/Cellar/openssl@3/3.0.3 /usr/local/opt/openssl。请注意此命令中openssl的目录可能随环境变化而变化,可通过brew info openssl查看。