最近,我一直在编译和分发软件。上次我这样做是通过构建我的程序并在其上运行 ldd 来获取它所链接的所有库。我得到了库的路径(比如 say /lib/x86_64-linux-gnu/libc.so.6
),然后从我的系统中复制并粘贴了它。它工作得很好,但手动复制和粘贴每个库似乎是重复的。有没有一种方法可以让我单独获得库的路径列表(没有所有的libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f1dc3333000)
),这样我就可以复制它们并在我的构建中分发它们?
到那时,您基本上是在构建整个 Linux 发行版的 tarball。根据您链接到的库,仅包含动态库本身可能是不够的(某些库依赖于插件模块和其他外部文件,这些文件未安装在相同位置,作为相同版本,跨所有发行版Linux)。
有几个选项可以处理这些差异:
我已经弄明白了(大部分)。
假设我构建的计划分发的程序位于 /bin/bash。我可以创建一个新目录并运行以下命令:
cp $(ldd /bin/bash) ./
这将给出一些错误消息,但可以忽略它们。