pika 是啥懂得都懂,如果你不知道,这篇文章对你也没有任何帮助
这篇文章已经同步到 pika 的 github中
编译 pika
0 准备
需要软件 centos7.x gcc4.8 g++4.8 git cmake
最好用centos7系列, 在别的系统中编译可能会报错, 人生苦短, 别和自己过不去
使用make 编译的时候, 使用 make -jN (N=cpu核数 加快编译速度)
1 安装工具
gcc g++ git 一般用 yum 安装
安装cmake
cmake 源码 https://cmake.org/download/
cmake依赖 openssl-devel 先用yum安装 openssl-devel
yum install openssl openssl-devel
编译安装cmake
解压cmake源码
./bootstrap
make && make install
2 解决rocksdb依赖,安装必备的库
rocksdb 依赖库
snappy gflags zlib bzip2 stdc++ lz4 zstd lzma 这些库都要安装 为了能静态编译,这些库都要安装静态库
编译snappy
mkdir build && cd build
编译 动态库
cmake -DSNAPPY_BUILD_BENCHMARKS=OFF -DSNAPPY_BUILD_TESTS=OFF -DBUILD_SHARED_LIBS=ON ..
make && make install
编译 静态库
cmake -DSNAPPY_BUILD_BENCHMARKS=OFF -DSNAPPY_BUILD_TESTS=OFF -DBUILD_SHARED_LIBS=OFF ..
make && make install
我没有找到同时编译动态库和静态库的方法,只能分开编译了
编译gflags
./configure
make && make install
编译zlib
./configure
make && make install
bzip2 一般linux都自带, 没有的用 yum 安装一个
yum install bzip2-devel bzip2-libs
stdc++ 这个库需要安装静态库,直接 yum 安装
yum install libstdc++ libstdc++-devel libstdc++-static
安装lz4
解压,进入 源码目录
1
2
3
4
5
6
7cd build/cmake
mkdir build && build
cmake -DBUILD_STATIC_LIBS=ON -DLZ4_BUILD_CLI=OFF -DLZ4_BUILD_LEGACY_LZ4C=OFF CMAKE_BUILD_TYPE=Relase -D LZ4_POSITION_INDEPENDENT_LIB=OFF ..
make && make install安装 zstd
解压源码
cd build/cmake/lib
make && make install
安装lzma
解压源码 xz压缩包
1
2./configure --disable-xz --disable-xzdec --disable-lzmadec --disable-lzmainfo --disable-lzma-links --disable-scripts --disable-doc
make && make install
最后, 所有的库都安装好后,把库加到 ld 目录中。因为有的库会安装到 /usr/local/lib64 目录下,但是有的系统没有把这个目录加到动态库搜索目录中,
解决办法
1 | echo "/usr/local/lib64" >> /etc/ld.so.conf.d/usr.local.conf |
执行 ldconfig
安装 protobuf
编译 protobuf, 用cmake编译 protobuf release 地址 https://github.com/protocolbuffers/protobuf/releases
下载 protobuf-cpp-XX.XX.XX.tar.gz
xx.XX.XX 是版本号,需要下载3.X版本的
./configure
make && make install
protobuf 也要安装静态库
到这 protobuf 安装完成
3 拉代码
拉 pika 代码 github https://github.com/OpenAtomFoundation/pika
这里最好通过代理去拉代码,要不然 速度感人
- git 设置代理
1 | git config --global https.proxy http://127.0.0.1:1080 |
- 拉取 依赖库代码
cd pika 源码目录
git submodule init
git submodule update
4 编译
预先编译
预先编译一次 glog 和 rocksdb, 因为这两个库直接用 pika 的 MakeFile 编译容易出问题,先预编译一下
- 先特殊编译一下glog库
1 | cd /third/glog |
- 编译rocksdb
rocksdb编译完不需要安装,只需要复制一下静态库就好
使用cmake构建
cmake 需要 cmake3, cmake命令如下
1 | cmake笔记3 -DWITH_BZ2=ON -DWITH_MD_LIBRARY=OFF -DWITH_SNAPPY=ON -DWITH_ZLIB=ON -DWITH_ZSTD=ON -DWITH_TOOLS=OFF -DWITH_TESTS=OFF -DCMAKE_BUILD_TYPE=Release .. |
把编译后的 librocksdb.a 复制到 rocksdb 的根目录
正常编译
按照官方给的文档编译即可,
执行 make
等待拉各个依赖模块的代码 然后自动编译
前期工作做好,编译中应该不会出错
检查编译是否正确
后续
编译完成后,这个可执行文件有很多 .so的依赖, 可移植比较差, 通过 脚本编译一个依赖较少的.so文件
执行 link_3_3_path-master.sh 脚本等待完成链接
编译完成
正常编译
到 output/bin/ 目录中, 执行
ldd pika
如果没有 notfind 的依赖库 说明编译完成了静态链接
output/bin/ 目录中的是正常编译的, link_3_3_path-master.sh 同级目录下的是静态链接的
静态链接脚本
1 | !/usr/bin/sh |
-Wl,-Bstatic 后面的是要 静态链接 的库
-Wl,-Bdynamic 后面的是要 动态链 接的库