ubuntu批量依赖库拷贝(ldd)

背景

如何将程序依赖的动态库拷贝到指定的目录?

例子

  1. 通过LDD查看依赖的动态库。
bash 复制代码
$ ldd extract_gpu
        linux-vdso.so.1 (0x00007ffd931e4000)
        libopencv_cudacodec.so.4.1 => /home/joyner/disk1/mmaction/third_party/opencv-4.1.0/build/lib/libopencv_cudacodec.so.4.1 (0x00007f064e89f000)
        libopencv_cudaoptflow.so.4.1 => /home/joyner/disk1/mmaction/third_party/opencv-4.1.0/build/lib/libopencv_cudaoptflow.so.4.1 (0x00007f064c710000)
        libopencv_videoio.so.4.1 => /home/joyner/disk1/mmaction/third_party/opencv-4.1.0/build/lib/libopencv_videoio.so.4.1 (0x00007f064c4b8000)
        libopencv_imgcodecs.so.4.1 => /home/joyner/disk1/mmaction/third_party/opencv-4.1.0/build/lib/libopencv_imgcodecs.so.4.1 (0x00007f064baf5000)
        libopencv_imgproc.so.4.1 => /home/joyner/disk1/mmaction/third_party/opencv-4.1.0/build/lib/libopencv_imgproc.so.4.1 (0x00007f0649205000)
        libopencv_cudaarithm.so.4.1 => /home/joyner/disk1/mmaction/third_party/opencv-4.1.0/build/lib/libopencv_cudaarithm.so.4.1 (0x00007f063d75c000)
        libopencv_core.so.4.1 => /home/joyner/disk1/mmaction/third_party/opencv-4.1.0/build/lib/libopencv_core.so.4.1 (0x00007f063bac0000)
        libzip.so.4 => /usr/lib/x86_64-linux-gnu/libzip.so.4 (0x00007f063b8ac000)
        libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f063b523000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f063b30b000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f063af1a000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f063acfb000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f063aaf7000)
        librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f063a8ef000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f064eded000)
        libopencv_cudawarping.so.4.1 => /home/joyner/disk1/mmaction/third_party/opencv-4.1.0/build/lib/libopencv_cudawarping.so.4.1 (0x00007f0636519000)
        libopencv_cudalegacy.so.4.1 => /home/joyner/disk1/mmaction/third_party/opencv-4.1.0/build/lib/libopencv_cudalegacy.so.4.1 (0x00007f063550e000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f0635170000)
        libdc1394.so.22 => /usr/lib/x86_64-linux-gnu/libdc1394.so.22 (0x00007f0634efa000)
        libgstreamer-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libgstreamer-1.0.so.0 (0x00007f0634bbf000)
        libgobject-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0 (0x00007f063496b000)
        libglib-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f0634654000)
        libgstapp-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libgstapp-1.0.so.0 (0x00007f0634445000)
        libgstriff-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libgstriff-1.0.so.0 (0x00007f0634237000)
        libgstpbutils-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libgstpbutils-1.0.so.0 (0x00007f0633fff000)
        libavcodec.so.58 => /usr/local/lib/libavcodec.so.58 (0x00007f063295a000)
        libavformat.so.58 => /usr/local/lib/libavformat.so.58 (0x00007f063250a000)
        libavutil.so.56 => /usr/local/lib/libavutil.so.56 (0x00007f0632294000)
        libswscale.so.5 => /usr/local/lib/libswscale.so.5 (0x00007f0632009000)
        libjpeg.so.8 => /usr/lib/x86_64-linux-gnu/libjpeg.so.8 (0x00007f0631da1000)
        libpng16.so.16 => /usr/lib/x86_64-linux-gnu/libpng16.so.16 (0x00007f0631b6f000)
        libtiff.so.5 => /usr/lib/x86_64-linux-gnu/libtiff.so.5 (0x00007f06318f8000)
        libjasper.so.1 => /usr/lib/x86_64-linux-gnu/libjasper.so.1 (0x00007f06316a3000)
        libz.so.1 => /usr/local/lib/libz.so.1 (0x00007f0631487000)
        libnppc.so.10 => /usr/local/cuda/lib64/libnppc.so.10 (0x00007f063120c000)
        libnppial.so.10 => /usr/local/cuda/lib64/libnppial.so.10 (0x00007f06304bd000)
        libnppidei.so.10 => /usr/local/cuda/lib64/libnppidei.so.10 (0x00007f062fad0000)
        libnppig.so.10 => /usr/local/cuda/lib64/libnppig.so.10 (0x00007f062e00a000)
        libnppist.so.10 => /usr/local/cuda/lib64/libnppist.so.10 (0x00007f062cc5e000)
        libnppitc.so.10 => /usr/local/cuda/lib64/libnppitc.so.10 (0x00007f062c775000)
        libcublas.so.10 => /usr/lib/x86_64-linux-gnu/libcublas.so.10 (0x00007f06284bf000)
        libcufft.so.10 => /usr/local/cuda/lib64/libcufft.so.10 (0x00007f062130a000)
        libtbb.so.2 => /usr/lib/x86_64-linux-gnu/libtbb.so.2 (0x00007f06210ce000)
        libopencv_cudaimgproc.so.4.1 => /home/joyner/disk1/mmaction/third_party/opencv-4.1.0/build/lib/libopencv_cudaimgproc.so.4.1 (0x00007f061e7ac000)
        libopencv_objdetect.so.4.1 => /home/joyner/disk1/mmaction/third_party/opencv-4.1.0/build/lib/libopencv_objdetect.so.4.1 (0x00007f061e546000)
        libopencv_cudafilters.so.4.1 => /home/joyner/disk1/mmaction/third_party/opencv-4.1.0/build/lib/libopencv_cudafilters.so.4.1 (0x00007f0601d18000)
        libopencv_calib3d.so.4.1 => /home/joyner/disk1/mmaction/third_party/opencv-4.1.0/build/lib/libopencv_calib3d.so.4.1 (0x00007f060197b000)
        libraw1394.so.11 => /usr/lib/x86_64-linux-gnu/libraw1394.so.11 (0x00007f060176c000)
        libusb-1.0.so.0 => /lib/x86_64-linux-gnu/libusb-1.0.so.0 (0x00007f0601554000)
        libgmodule-2.0.so.0 => /usr/lib/x86_64-linux-gnu/libgmodule-2.0.so.0 (0x00007f0601350000)
        libffi.so.6 => /usr/lib/x86_64-linux-gnu/libffi.so.6 (0x00007f0601148000)
        libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f0600ed6000)
        libgstbase-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libgstbase-1.0.so.0 (0x00007f0600c61000)
        libgstaudio-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libgstaudio-1.0.so.0 (0x00007f06009ec000)
        libgsttag-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libgsttag-1.0.so.0 (0x00007f06007b1000)
        libgstvideo-1.0.so.0 => /usr/lib/x86_64-linux-gnu/libgstvideo-1.0.so.0 (0x00007f0600518000)
        libswresample.so.3 => /usr/local/lib/libswresample.so.3 (0x00007f06002fb000)
        liblzma.so.5 => /lib/x86_64-linux-gnu/liblzma.so.5 (0x00007f06000d5000)
        libjbig.so.0 => /usr/lib/x86_64-linux-gnu/libjbig.so.0 (0x00007f05ffec7000)
        libcublasLt.so.10 => /usr/lib/x86_64-linux-gnu/libcublasLt.so.10 (0x00007f05fe034000)
        libnppicc.so.10 => /usr/local/cuda/lib64/libnppicc.so.10 (0x00007f05fda56000)
        libnpps.so.10 => /usr/local/cuda/lib64/libnpps.so.10 (0x00007f05fcfd3000)
        libnppif.so.10 => /usr/local/cuda/lib64/libnppif.so.10 (0x00007f05fa099000)
        libnppim.so.10 => /usr/local/cuda/lib64/libnppim.so.10 (0x00007f05f989a000)
        libopencv_features2d.so.4.1 => /home/joyner/disk1/mmaction/third_party/opencv-4.1.0/build/lib/libopencv_features2d.so.4.1 (0x00007f05f95c7000)
        libopencv_flann.so.4.1 => /home/joyner/disk1/mmaction/third_party/opencv-4.1.0/build/lib/libopencv_flann.so.4.1 (0x00007f05f936e000)
        libudev.so.1 => /lib/x86_64-linux-gnu/libudev.so.1 (0x00007f05f9150000)
        liborc-0.4.so.0 => /usr/lib/x86_64-linux-gnu/liborc-0.4.so.0 (0x00007f05f8ed4000)
  1. 写一个SHELL脚本,自动拷贝依赖的动态库。

vi release.sh

#!/bin/bash
deplist=$( ldd $1 | awk '{if (match($3,"/")){ print $3}}' )  
cp -L -n $deplist $2 

-L 表示拷贝文件(如果是软链,会拷贝到最终的文件)。 
-n 表示不覆盖已有文件。 
  1. 创建目标目录

    mkdir release

  2. 将postgres依赖的动态库拷贝到目标目录

    bash release.sh extract_gpu ./release/

bash 复制代码
ll ./release

total 1.3G
drwxrwxr-x 2 joyner joyner 4.0K 6月   8 15:33 .
drwxrwxr-x 4 joyner joyner 4.0K 6月   8 15:33 ..
-rwxr-xr-x 1 joyner joyner  13M 6月   8 15:33 libavcodec.so.58
-rwxr-xr-x 1 joyner joyner 2.4M 6月   8 15:33 libavformat.so.58
-rwxr-xr-x 1 joyner joyner 411K 6月   8 15:33 libavutil.so.56
-rwxr-xr-x 1 joyner joyner 2.0M 6月   8 15:33 libc.so.6
-rwxr-xr-x 1 joyner joyner  29M 6月   8 15:33 libcublasLt.so.10
-rwxr-xr-x 1 joyner joyner  65M 6月   8 15:33 libcublas.so.10
-rwxr-xr-x 1 joyner joyner 112M 6月   8 15:33 libcufft.so.10
-rw-r--r-- 1 joyner joyner 216K 6月   8 15:33 libdc1394.so.22
-rw-r--r-- 1 joyner joyner  15K 6月   8 15:33 libdl.so.2
-rw-r--r-- 1 joyner joyner  31K 6月   8 15:33 libffi.so.6
-rw-r--r-- 1 joyner joyner  95K 6月   8 15:33 libgcc_s.so.1
-rw-r--r-- 1 joyner joyner 1.1M 6月   8 15:33 libglib-2.0.so.0
-rw-r--r-- 1 joyner joyner  14K 6月   8 15:33 libgmodule-2.0.so.0
-rw-r--r-- 1 joyner joyner 335K 6月   8 15:33 libgobject-2.0.so.0
-rw-r--r-- 1 joyner joyner  60K 6月   8 15:33 libgstapp-1.0.so.0
-rw-r--r-- 1 joyner joyner 466K 6月   8 15:33 libgstaudio-1.0.so.0
-rw-r--r-- 1 joyner joyner 469K 6月   8 15:33 libgstbase-1.0.so.0
-rw-r--r-- 1 joyner joyner 226K 6月   8 15:33 libgstpbutils-1.0.so.0
-rw-r--r-- 1 joyner joyner 1.3M 6月   8 15:33 libgstreamer-1.0.so.0
-rw-r--r-- 1 joyner joyner  55K 6月   8 15:33 libgstriff-1.0.so.0
-rw-r--r-- 1 joyner joyner 237K 6月   8 15:33 libgsttag-1.0.so.0
-rw-r--r-- 1 joyner joyner 610K 6月   8 15:33 libgstvideo-1.0.so.0
-rw-r--r-- 1 joyner joyner 311K 6月   8 15:33 libjasper.so.1
-rw-r--r-- 1 joyner joyner  57K 6月   8 15:33 libjbig.so.0
-rw-r--r-- 1 joyner joyner 415K 6月   8 15:33 libjpeg.so.8
-rw-r--r-- 1 joyner joyner 151K 6月   8 15:33 liblzma.so.5
-rw-r--r-- 1 joyner joyner 1.7M 6月   8 15:33 libm.so.6
-rwxr-xr-x 1 joyner joyner 486K 6月   8 15:33 libnppc.so.10
-rwxr-xr-x 1 joyner joyner  12M 6月   8 15:33 libnppial.so.10
-rwxr-xr-x 1 joyner joyner 3.9M 6月   8 15:33 libnppicc.so.10
-rwxr-xr-x 1 joyner joyner 7.8M 6月   8 15:33 libnppidei.so.10
-rwxr-xr-x 1 joyner joyner  46M 6月   8 15:33 libnppif.so.10
-rwxr-xr-x 1 joyner joyner  25M 6月   8 15:33 libnppig.so.10
-rwxr-xr-x 1 joyner joyner 6.0M 6月   8 15:33 libnppim.so.10
-rwxr-xr-x 1 joyner joyner  18M 6月   8 15:33 libnppist.so.10
-rwxr-xr-x 1 joyner joyner 3.0M 6月   8 15:33 libnppitc.so.10
-rwxr-xr-x 1 joyner joyner 8.4M 6月   8 15:33 libnpps.so.10
-rwxrwxr-x 1 joyner joyner 1.8M 6月   8 15:33 libopencv_calib3d.so.4.1
-rwxrwxr-x 1 joyner joyner  29M 6月   8 15:33 libopencv_core.so.4.1
-rwxrwxr-x 1 joyner joyner 186M 6月   8 15:33 libopencv_cudaarithm.so.4.1
-rwxrwxr-x 1 joyner joyner 810K 6月   8 15:33 libopencv_cudacodec.so.4.1
-rwxrwxr-x 1 joyner joyner 458M 6月   8 15:33 libopencv_cudafilters.so.4.1
-rwxrwxr-x 1 joyner joyner  40M 6月   8 15:33 libopencv_cudaimgproc.so.4.1
-rwxrwxr-x 1 joyner joyner  15M 6月   8 15:33 libopencv_cudalegacy.so.4.1
-rwxrwxr-x 1 joyner joyner  32M 6月   8 15:33 libopencv_cudaoptflow.so.4.1
-rwxrwxr-x 1 joyner joyner  67M 6月   8 15:33 libopencv_cudawarping.so.4.1
-rwxrwxr-x 1 joyner joyner 975K 6月   8 15:33 libopencv_features2d.so.4.1
-rwxrwxr-x 1 joyner joyner 460K 6月   8 15:33 libopencv_flann.so.4.1
-rwxrwxr-x 1 joyner joyner 8.4M 6月   8 15:33 libopencv_imgcodecs.so.4.1
-rwxrwxr-x 1 joyner joyner  41M 6月   8 15:33 libopencv_imgproc.so.4.1
-rwxrwxr-x 1 joyner joyner 491K 6月   8 15:33 libopencv_objdetect.so.4.1
-rwxrwxr-x 1 joyner joyner 415K 6月   8 15:33 libopencv_videoio.so.4.1
-rw-r--r-- 1 joyner joyner 497K 6月   8 15:33 liborc-0.4.so.0
-rw-r--r-- 1 joyner joyner 454K 6月   8 15:33 libpcre.so.3
-rw-r--r-- 1 joyner joyner 198K 6月   8 15:33 libpng16.so.16
-rwxr-xr-x 1 joyner joyner 142K 6月   8 15:33 libpthread.so.0
-rw-r--r-- 1 joyner joyner  59K 6月   8 15:33 libraw1394.so.11
-rw-r--r-- 1 joyner joyner  31K 6月   8 15:33 librt.so.1
-rw-r--r-- 1 joyner joyner 1.6M 6月   8 15:33 libstdc++.so.6
-rwxr-xr-x 1 joyner joyner 115K 6月   8 15:33 libswresample.so.3
-rwxr-xr-x 1 joyner joyner 523K 6月   8 15:33 libswscale.so.5
-rw-r--r-- 1 joyner joyner 230K 6月   8 15:33 libtbb.so.2
-rw-r--r-- 1 joyner joyner 475K 6月   8 15:33 libtiff.so.5
-rw-r--r-- 1 joyner joyner 119K 6月   8 15:33 libudev.so.1
-rw-r--r-- 1 joyner joyner  95K 6月   8 15:33 libusb-1.0.so.0
-rw-r--r-- 1 joyner joyner  79K 6月   8 15:33 libzip.so.4
-rwxr-xr-x 1 joyner joyner 120K 6月   8 15:33 libz.so.1
相关推荐
小屁不止是运维1 小时前
麒麟操作系统服务架构保姆级教程(二)ssh远程连接
linux·运维·服务器·学习·架构·ssh
gavin_gxh3 小时前
SAP PP ECN CSAP_MAT_BOM_MAINTAIN
运维·经验分享·其他
黑客K-ing3 小时前
网络安全防范
linux·服务器·web安全
这题怎么做?!?3 小时前
ARP协议及其具体过程
运维·服务器·网络
Lay_鑫辰3 小时前
禾川HCQ1系列PAC脉冲控制步进驱动器
运维·人工智能·单片机·嵌入式硬件·自动化
王三三3 小时前
群晖利用acme.sh自动申请证书并且自动重载证书的问题解决
linux·自动化·证书·群晖·acme·acme.sh·lets encrypt
路飞雪吖~4 小时前
【Linux】进程控制
linux·运维·服务器
wy02_4 小时前
Linux基本命令
linux·运维
qq_459238494 小时前
Linux之压缩解压相关命令
linux
北京华人开创公司4 小时前
京准电钟:电厂自控NTP时间同步服务器技术方案
运维·服务器·卫星时钟服务器·ntp时间服务器·时间同步服务器·网络时间服务器·北斗授时服务器