一键复制动态库依赖脚本
一键复制依赖库脚本
在Linux开发中,当我们需要将编译好的动态库部署到其他机器时,经常会遇到依赖缺失的问题。手动查找和复制所有依赖库非常繁琐,这个脚本可以帮你自动完成这项工作。
功能介绍
- 自动识别目标动态库的所有依赖项
- 创建专用目录存放依赖文件
- 一键复制所有依赖到指定位置
使用方法
#!/bin/bash
# 定义源.so文件路径、目标依赖存放路径和so文件名
SO_FILE_PATH="libPID.so"
DEPENDS_DIR="depends"
# 检查并创建depends目录,如果它不存在
if [ ! -d "$DEPENDS_DIR" ]; then
mkdir -p "$DEPENDS_DIR"
echo "Directory $DEPENDS_DIR created."
fi
# 使用ldd获取.so文件的所有依赖,并循环处理每一行
while IFS= read -r line; do
# 每一行格式类似 "libxxx.so => /path/to/libxxx.so (version)"
if [[ $line == *"=>"* ]]; then
lib_path=$(echo "$line" | awk -F '=>' '{print $2}' | awk '{print $1}')
# 如果路径非空并且不是"(0x00000000)"这样的形式(表示静态链接或未找到)
if [[ ! -z "$lib_path" && "$lib_path" != \"\(*\)\" ]]; then
lib_name=$(basename "$lib_path")
# 将依赖库复制到目标目录
cp "$lib_path" "$DEPENDS_DIR/$lib_name"
echo "Copied $lib_path to $DEPENDS_DIR/$lib_name"
fi
fi
done < <(ldd "$SO_FILE_PATH")
echo "Done."
参数说明
SO_FILE_PATH
: 目标动态库文件路径(默认:libPID.so)DEPENDS_DIR
: 依赖库存放目录(默认:depends)
使用步骤
- 修改脚本中的
SO_FILE_PATH
指向你的动态库 - 赋予执行权限:
chmod +x onekeycopy_depends.sh
- 运行脚本:
./onekeycopy_depends.sh
注意事项
- 需要系统安装
ldd
命令 - 仅支持动态链接的依赖库
- 确保对目标动态库有读取权限