一键复制动态库依赖脚本

一键复制依赖库脚本

在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)

使用步骤

  1. 修改脚本中的SO_FILE_PATH指向你的动态库
  2. 赋予执行权限: chmod +x onekeycopy_depends.sh
  3. 运行脚本: ./onekeycopy_depends.sh

注意事项

  • 需要系统安装ldd命令
  • 仅支持动态链接的依赖库
  • 确保对目标动态库有读取权限