常见问题
更新代码后重新编译
如果通过git pull
更新代码后,可能会出现编译失败的情况,这可能是因为:
- 依赖的子模块发生了变化,需要更新子模块到合适的版本(通过
git status
可以看rdsn和rocksdb子模块是否发生变化); - 编译配置发生了变化,CMake文件已过期;
- thirdparty依赖发生了变化,需要重新下载和编译依赖库;可以先尝试按照如下步骤是否能解决(解决子模块和编译配置发生变化的问题):
- git submodule update
- ./run.sh build -c
如果还不能解决,可以进一步尝试(解决thirdparty依赖变化的问题):
- ./run.sh build --clear_thirdparty
如果还不能解决,请咨询我们。
使用非系统自带的boost库
编译默认使用系统自带的boost库,但是如果系统自带的库版本太低且无法升级,可以自己下载和编译高版本的boost库,然后通过-b
参数传进来:
- ./run.sh build -b /your/boost/installation/path
譬如:
- ./run.sh build -b /home/work/software/boost_1_58_0/output
使用toolchain编译
编译默认使用系统自带的gcc/g++,但是如果系统自带的编译器版本太低且无法升级(不支持C++11),可以自己下载和编译高版本的gcc toolchain,然后放到PATH中:
- export PATH="$TOOLCHAIN_DIR/bin:$PATH"
- ./run.sh build
运行时出现libstdc++版本不兼容问题
如果用户使用自己的(非系统自带的)gcc或者boost库,在运行时可能出现c++版本不兼容的错误:
./pegasus_server: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by ./pegasus_server)
./pegasus_server: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.17' not found (required by ./pegasus_server)
./pegasus_server: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.19' not found (required by ./pegasus_server)
./pegasus_server: /usr/lib64/libstdc++.so.6: version `CXXABI_1.3.5' not found (required by ./pegasus_server)
此时最好使用pack工具打包成运行时的执行包:
- pack_server:服务包,用于部署Pegasus集群的服务进程。注意在运行前需要:
export LD_LIBRARY_PATH=$package_dir/DSN_ROOT/lib
。 - pack_client:C++客户端库,用于业务开发。
- pack_tools:工具包,run.sh里面大部分命令都能用,包括shell和onebox工具。以上三个pack工具都支持
-b
和-g
选项,将用户自己的boost和gcc库放到DSN_ROOT/lib中,避免运行时链接到错误的库。这样,即使跨机器,只要libc兼容,执行包都能正常使用,避免库不兼容的困扰。
如果你用了自己的gcc,就在pack的时候加上-g
选项,譬如:
./run.sh pack_server -g
如果你用了自己的boost,就在pack的时候加上-b
选项,譬如:
./run.sh pack_server -b
如果都用了,就同时加上-b
和-g
选项,譬如:
./run.sh pack_server -b -g
指定gflags以编译bench工具
注:从1.10.0版本开始,Pegasus编译强制依赖gflags库,以下步骤可以忽略。
Pegasus的bench工具修改自RocksDB的bench,其在编译时需要依赖gflags,如果找不到gflags,虽然也能编译成功,但是bench程序无法使用,会报如下错误:
Please install gflags to run rocksdb tools
默认使用系统库中自带的gflags,如果系统库中没有安装,可以自己下载和编译gflags库,然后放到以下环境变量中:
- export CPATH="$GFLAGS_DIR/include"
- export LIBRARY_PATH="$GFLAGS_DIR/lib"
- ./run.sh build