Repository navigation
v3.1.5
1. 注意事项
- Bear 依赖特定路径下的拦截器组件。在编译时,拦截器的路径已经被硬编码到程序中。正常情况下,请选择:bear-tmp.tar.gz。内附具体的使用要求
- 遇到 cannot open /xxx/xxx/bear: No such file 错误时,说明拦截器路径不匹配
- 如果预编译版本不适合您的环境,建议从源码编译安装以确保路径正确配置
2. 编译说明
2.1. 编译环境
OS: Ubuntu18.04.6 x86_64
fmt: 8.1.1
spdlog: 1.11.0
nlohmann_json: 3.11.3
protobuf: 23.1.0
grpc++: 1.56.2
gcc: 9.4.0 2.2. 编译过程
编译 log 参见:bear_build.log
# 克隆代码
git clone https://github.com/rizsotto/Bear.git
cd Bear
# 创建构建目录
mkdir build && cd build
# 配置编译
LDFLAGS="-L/usr/local/gcc-9/lib64 -L/usr/local/lib -static-libstdc++ -static-libgcc -lstdc++fs -lspdlog" cmake .. \
-DCMAKE_C_COMPILER=/usr/local/gcc-9/bin/gcc-9 \
-DCMAKE_CXX_COMPILER=/usr/local/gcc-9/bin/g++-9 \
-DENABLE_UNIT_TESTS=OFF \
-DENABLE_FUNC_TESTS=OFF \
-DENABLE_GRPC=OFF \
-DCMAKE_INSTALL_LIBDIR=lib \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/var/tmp/bear \
-DINTERCEPTOR_INSTALL_DIR=/var/tmp/bear/bin \
-DBUILD_SHARED_LIBS=OFF
# 编译
make -j$(nproc)
# 安装
make install2.3. 打包过程
# 1. 创建完整的目录结构
mkdir -p bear_package
# 2. 复制所有组件
cp -rf /var/tmp/bear/* bear_package/
# 3. 复制所有特殊依赖库
cp /usr/local/lib/libfmt.so.8 bear_package/lib/
cp /usr/local/lib/libz.so.1 bear_package/lib/
# 4. 修改所有可执行文件的 rpath
# 主程序
patchelf --set-rpath '$ORIGIN/../lib' bear_package/bin/bear
# wrapper
patchelf --set-rpath '$ORIGIN/../../lib' bear_package/lib/bear/wrapper
# libexec.so
patchelf --set-rpath '$ORIGIN/../../lib' bear_package/lib/bear/libexec.so
# 检查是否还有其他可执行文件需要修改
find bear_package/lib/bear -type f -executable -exec patchelf --set-rpath '$ORIGIN/../../lib' {} \;
# 5. 打包
tar czf bear_package.tar.gz bear_package/