Skip to content

v3.1.5

Choose a tag to compare

@ifoxser ifoxser released this 16 Feb 18:39
· 1 commit to master since this release

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 install

2.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/