¶ make
静态库:
make -j$(nproc) static_lib
动态库:
make -j$(nproc) shared_lib
但是这俩好像只能用一个,在编译另一个之前好像要先make clean一下。相关:rocksdb: /usr/bin/ld: ./memory/concurrent_arena.o: relocation R_X86_64_TPOFF32 against symbol `_ZN7rocksdb15C
¶ cmake
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DUSE_RTTI=true -DFAIL_ON_WARNINGS=OFF
# 全部编译
make -j$(nproc)
# 只编译静态库
make -j$(nproc) rocksdb
# 只编译动态库
make -j$(nproc) rocksdb-shared
-DUSE_RTTI=true中RTTI的全称是Run-Time Type Identification。相关:
¶ Asynchronous IO
官方文档:https://github.com/facebook/rocksdb/wiki/Asynchronous-IO
先编译安装folly: 编译folly
这里假设folly安装到了$workspace/deps。
sudo apt install -y liburing-dev
cd build
# -DPORTABLE=ON: 因为folly编译的时候没有-march=native,所以rocksdb编译的时候也不要-march-native
# -DWITH_LIBURING=OFF: 不知道为什么,如果WITH_LIBURING=ON,db_bench执行完成之后reader不知道为什么会卡住没法返回
cmake .. -DCMAKE_BUILD_TYPE=Release -DUSE_RTTI=true -DFAIL_ON_WARNINGS=OFF -DUSE_COROUTINES=true -DROCKSDB_BUILD_SHARED=OFF -DPORTABLE=ON -DWITH_LIBURING=OFF
make -j$(nproc)
然后就可以在ReadOptions里开async_io了。