編譯ROCKSDB總結

瘋光無線發表於2018-11-13

Rocksdb是挺好的一個東西,就是取得一個可用的庫太麻煩。之前我是用的rocksdbsharp裡面他有編譯好windows 和 linux的庫 兼

容性還挺好,ubuntu win10 直接跑沒毛病,可惜他是去年build的了,我要用的checkpoint 這麼重要的功能,他這個版本沒有。於是乎只好自行編譯rocksdb,感覺上了一條賊船啊。

我在使用rocksdb開發一個資料庫https://github.com/lightszero/lightchain,歡迎關注。

Ubuntu的順利編譯

Ubuntu,ubuntu 編譯rocksdb比較順利,按照官網說明一步步正常編譯,略過。

編譯通過的gcc版本為7.3

Windows的艱難編譯

Windows版本因為是VC很熟悉,只不過原來都是一堆dll,互相引用,很麻煩,還有mt md的問題,其實就是機械的把所有依賴的原始碼找回來,編譯成lib,改mt,體力活。最後變成一個啥也不依賴的dll,容易部署。

https://github.com/lightszero/lightchain/blob/master/lightdb/native/rocksdb-5.17.0.dll

已編好,僅限x64

Centos的災難

後來把so檔案放到centos跑不起,一看一堆so找不到

用ldd 指令 一看,缺一堆東西,第一反應是GCC有問題,試裝GCC7.3,一路升級一路bug,最後也沒裝上,沒新查了。

 

 

仔細觀察rocksdb專案,facebook說明是gcc 4.8以上,centos7是滿足的。既然是cmake管理的,那麼從新來整cmake吧,忽略facebook的官方文件

 

期間發生過 cmake版本太低,make版本太低等等狀況,吐血三升

 

Cmake使用很順利

需要注意這幾個選項,rocksdb這幾個壓縮演算法,不開就沒有,就只能不壓縮了。

由於rocksdb是分層壓縮的,通用的zlib肯定要帶上,目前我對小資料選擇的壓縮演算法是snappy。和leveldb一樣,snappy一定要帶上。

實際還是四個壓縮都帶上吧

 

然後按facebook官網說明安裝依賴庫,編譯,一切成功。

然後ldd 一看,又吐血,yum 安裝出來的snappy庫缺兩個依賴庫,偏偏是最重要的這個你有問題。

 

沒辦法自己編譯snappy吧,把最新的原始碼拖下來,繼續吐血,什麼鬼,這個專案只能生成.a

可是rocksdb那邊妥妥的配置載入snappy.so啊,cmake我門外漢,打死我也不想去改這個。

後來去把snappy的歷史版本全部都拖下來研究,嗯 snappy 1.1.5 可以用,編譯出來的so也正常了

總結

總結一下,記錄下來,現在凌晨五點四十,編譯了妥妥的一晚上。Centos真香……

 

cmake 和 make 先升級了

我是將make升級到了4.2

Cmake升級到了3.6.2

成功編譯出可用的rocksdb

gcc 需要4.8以上

rocksdb編譯 別看文件了

  1. rocksdb的說明我怎麼也裝不上 make 直接一堆錯,原因不明,我是直接重新搞了cmake,4個壓縮庫選項開啟,

    另外將gflags 和 snappy 原來的find_package 改成了find_library

    然後

    cmake .

    make rocksdb-shared -j

    成功

編譯之前先安裝一堆依賴庫

    這個可以看文件,沒錯

就是facebook 網頁這一堆

最重要,yum install snappy snappy-devel 在我的centos7上有問題,依賴庫找不到。

你編譯 出來之後 ldd librocksdb.so 這樣看依賴庫情況,有not found 就是不行。

 

處理方法是自己編譯 snappy1.1.5,然後cp 到 usr/lib 等幾個目錄

相關文章