流程:
- 编译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