Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

流程:

  • 编译rocksdb静态库(.a)或动态库(.so)
  • 写编译控制文件,给你的target链接rocksdb库,以及rocksdb库依赖的其他库

编译生成rocksdb库

编译生成rocksdb动态库:

tar -zxvf rocksdb-v8.0.0-main.tar.gz # rocksdb-v8.0.0-main.tar.gz是github上rocksdb源码
cd rocksdb-v8.0.0
make shared_lib DISABLE_WARNING_AS_ERROR=true
# 在当前目录下生成librocksdb.so*

编译生成rocksdb静态库:上述把shared_lib改成static_lib,在当前目录下生成librocksdb.a

g++手动编译,没有解决

指定要链接rocksdb库,所以加上参数-lrocksdb(以及让ld详细输出-Wl,--verbose),且加上-L/home/yuanzhiqiu/project/gpstore/tools/rocksdb-v8.0.0指明编译链接阶段可以搜索库的路径

但是仍然报一样的错

ld能找到rocksdb库,librocksdb.so和librocksdb.a都找到了

attempt to open /home/yuanzhiqiu/project/gpstore/tools/rocksdb-v8.0.0/librocksdb.so succeeded

这就很玄学

CMake解决

用cmake,写完target_link_libraries(rocksdb_lmdb /home/yuanzhiqiu/project/gpstore/tools/rocksdb-v8.0.0/librocksdb.a)之后就直接解决了上面的链接阶段没有链接到rocksdb库的问题

https://github.com/TuGraph-family/gdbms-microbenchmark/tree/master/kv_test 编译rocksdb_lmdb.cpp

cmake_minimum_required(VERSION 3.15)
project(rksdb_lmdb)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_FLAGS
        "${CMAKE_CXX_FLAGS} -std=c++17 -I/home/yuanzhiqiu/project/gpstore/tools/rocksdb-v8.0.0/include -pthread")
        # -Wl,--verbose: argument to ld
        # -pthread: Define additional macros required for using the POSIX threads library.  

add_executable(rocksdb_lmdb rocksdb_lmdb.cpp)
target_link_libraries(rocksdb_lmdb lmdb /home/yuanzhiqiu/project/gpstore/tools/rocksdb-v8.0.0/librocksdb.a z dl gflags stdc++fs)
# z dl: needed for rocksdb
# gflags stdc++fs: needed in rocksdb_lmdb.cpp

评论