编译leveldb-1.20
编译leveldbjni-all-1.8.jar之前,需要先将snappy和leveldb编译成静态库,再将两个静态库编译进leveldbjni.so里,最后生成leveldbjni-all-1.8.jar压缩包。
从github下载源码。
wget https://github.com/google/leveldb/archive/v1.20.tar.gz
解压源码包。
tar -zxvf v1.20.tar.gz
进入解压后目录。
cd leveldb-1.20
修改文件build_detect_platform,按照下图修改250至252行,其中第250-251行是修改原行内容,而第252行是新增行。
vim build_detect_platform
echo “PLATFORM_CCFLAGS=$PLATFORM_CCFLAGS $PLATFORM_SHARED_CFLAGS” >> $OUTPUT echo “PLATFORM_CXXFLAGS=$PLATFORM_CXXFLAGS $PLATFORM_SHARED_CFLAGS” >> $OUTPUT echo “PLATFORM_SHARED_CFLAGS=” >> $OUTPUT
手动合入leveldb.so源码的patch,具体patch参考github提交。
Patch的提交页面只显示了一个提交,本次提交的前一个代码提交中还有一个patch需要合入。
在“db/db_impl.cc”文件中,增加127至131行和1479至1511行。
在“db/db_impl.h”文件中,增加45至48行和141至148行
在“db/db_test.cc”文件中,增加1870至1873行
在“include/leveldb/db.h”文件中,增加144至147行。
执行编译
make -j20
编译完成后,将在“out-shared”目录下生成动态库libleveldb.so等,在out-static目录下生成libleveldb.a静态库和其它二进制文件。将out-static目录下的静态库拷贝到当前目录,并设置LEVELDB_HOME。
export LEVELDB_HOME=pwd
cp out-static/libleveldb.a ./
将静态库拷贝到对应目录,是为了后续将静态库编译进leveldbjni.so做准备。