找回密码
 立即注册
查看: 303|回复: 0

pika编译笔记

[复制链接]
发表于 2022-2-13 21:33 | 显示全部楼层 |阅读模式
pika 是啥懂得都懂,如果你不知道,这篇文章对你也没有任何帮助

这篇文章已经同步到 pika 的 github中

pika issue
编译 pika

0 准备


需要软件  centos7.xgcc4.8g++4.8gitcmake
最好用centos7系列, 在别的系统中编译可能会报错, 人生苦短, 别和自己过不去

使用make 编译的时候, 使用 make -jN   (N=cpu核数 加快编译速度)
<hr>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
<hr>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

    解压,进入 源码目录
    cd build/cmakemkdir build && buildcmake -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压缩包
    ./configure --disable-xz --disable-xzdec --disable-lzmadec --disable-lzmainfo --disable-lzma-links --disable-scripts  --disable-docmake && make install

最后, 所有的库都安装好后,把库加到 ld 目录中。因为有的库会安装到 /usr/local/lib64 目录下,但是有的系统没有把这个目录加到动态库搜索目录中,

解决办法
echo "/usr/local/lib64" >> /etc/ld.so.conf.d/usr.local.confecho "/usr/local/lib" >> /etc/ld.so.conf.d/usr.local.conf
执行 ldconfig
<hr>安装 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 安装完成
<hr>3  拉代码


拉 pika 代码  github  https://github.com/OpenAtomFoundation/pika
这里最好通过代理去拉代码,要不然 速度感人
    git 设置代理
git config --global https.proxy http://127.0.0.1:1080git config --global https.proxy https://127.0.0.1:1080git config --global --unset http.proxygit config --global --unset https.proxy
    拉取 依赖库代码

cd pika 源码目录

git submodule init
git submodule update
<hr>4 编译

预先编译


预先编译一次 glogrocksdb, 因为这两个库直接用 pika 的 MakeFile 编译容易出问题,先预编译一下
    先特殊编译一下glog库
cd /third/glog./configumake && make install
    编译rocksdb

rocksdb编译完不需要安装,只需要复制一下静态库就好

使用cmake构建

cmake 需要 cmake3, cmake命令如下
cmake -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 ..make -jN
把编译后的 librocksdb.a 复制到 rocksdb 的根目录
正常编译


按照官方给的文档编译即可,

执行  make

等待拉各个依赖模块的代码   然后自动编译

前期工作做好,编译中应该不会出错

检查编译是否正确
后续


编译完成后,这个可执行文件有很多 .so的依赖, 可移植比较差, 通过 脚本编译一个依赖较少的.so文件

执行 link_3_3_path-master.sh 脚本等待完成链接
<hr>编译完成


    正常编译

    output/bin/  目录中, 执行  ldd pika  如果没有 notfind 的依赖库  说明编译完成了

    静态链接
    output/bin/ 目录中的是正常编译的,  link_3_3_path-master.sh 同级目录下的是静态链接的
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2025-6-2 22:15 , Processed in 0.325832 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表