![如何识别系统共享库?](https://linux22.com/image/111031/%E5%A6%82%E4%BD%95%E8%AF%86%E5%88%AB%E7%B3%BB%E7%BB%9F%E5%85%B1%E4%BA%AB%E5%BA%93%EF%BC%9F.png)
我的软件工具有一些外部依赖项。我将其分发为康达适用于 linux64 的软件包,具有预编译的依赖项(包括共享库)。不幸的是,我不知道如何从特定于软件的库中识别系统库。我认为像这样分发库libc
是没有必要的,甚至应该避免,因为不同的 Linux 发行版可能有某些系统库的特定版本。
我正在使用这个简单的 oneliner 来导出共享库(来源):
$ ldd file | grep "=> /" | awk '{print $3}' | xargs -I '{}' cp -v '{}' /destination
例如,这些是 Tesseract 软件的共享库:
$ ldd tesseract.bin
linux-vdso.so.1 => (0x00007ffff4bc7000)
libtesseract.so.4 => not found
liblept.so.5 => not found
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f0ad8bf3000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f0ad89dc000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0ad8615000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f0ad830a000)
/lib64/ld-linux-x86-64.so.2 (0x0000563cf6115000)
正如您所看到的,只有libtesseract.so.4
和liblept.so.5
是特定于软件的库(未找到,因为它们不在 中LD_LIBRARY_PATH
)。
那么有没有办法识别系统共享库呢?我可以检查它们是否在 中/lib
,但这总是正确的吗?是否只有系统库,所以它们不能在其他地方?