首先.有时当人们谈论库时,他们正在谈论.deb包,它们为其他包提供库.我们先处理这个案子.您听到使用术语库的其他上下文是传统的.so
shared object感.我们将处理那一秒.
原文链接:https://www.f2er.com/ubuntu/348056.htmlapt-cache取决于< package_name>将返回< package name>的依赖项包列表.包不一定与库一致(即,可链接的.so文件意义上的库),但在Debian和Ubuntu库中通常打包为lib< something>.如果您执行dpkg -l | grep<库包名称>您可以找到包含安装的库的包.
kelliott@mis-ke-lnx:~$ apt-cache depends perl perl Depends: perl-base Depends: perl-modules Depends: libbz2-1.0 Depends: libc6 Depends: libdb4.7 Depends: libgdbm3 Depends: zlib1g kelliott@mis-ke-lnx:~$dpkg -l |grep libc6 ii libc6 2.11.2-10 Embedded GNU C Library: Shared libraries ii libc6-dev 2.11.2-10 Embedded GNU C Library: Development Libraries and Header Files
或者你可以走另一条路.如果你想知道libwww-perl包需要什么包,你可以使用这个方便的小perl脚本来返回同样安装的libwww-perl反向依赖项列表.
#!/usr/bin/env perl use strict; use warnings; use AptPkg::Cache; my $cache = AptPkg::Cache->new; my $pkg = $ARGV[0] or die 'supply a package name as the first arg'; my @acrd = split /\s+/,`apt-cache rdepends $pkg`; my $state; for (@acrd) { unless ( $_ eq 'Reverse' or $_ eq 'Depends:' ) { $state = $cache->{$_}->{'CurrentState'}; print "$_\n" if $state eq 'Installed'; } }
现在.so共享对象文件有点不同.我喜欢使用ldd和apt-file的组合.假设我对与ls链接的目标文件感兴趣:
kelliott@mis-ke-lnx:~$ldd /bin/ls linux-vdso.so.1 => (0x00007fff8b05d000) libselinux.so.1 => /lib/libselinux.so.1 (0x00007fcfb7e24000) librt.so.1 => /lib/librt.so.1 (0x00007fcfb7c1c000) libacl.so.1 => /lib/libacl.so.1 (0x00007fcfb7a14000) libc.so.6 => /lib/libc.so.6 (0x00007fcfb76b3000) libdl.so.2 => /lib/libdl.so.2 (0x00007fcfb74af000) /lib64/ld-linux-x86-64.so.2 (0x00007fcfb8057000) libpthread.so.0 => /lib/libpthread.so.0 (0x00007fcfb7292000) libattr.so.1 => /lib/libattr.so.1 (0x00007fcfb708e000) kelliott@mis-ke-lnx:~$apt-file search libattr.so.1 ia32-libs: /lib32/libattr.so.1 ia32-libs: /lib32/libattr.so.1.1.0 libattr1: /lib/libattr.so.1 libattr1: /lib/libattr.so.1.1.0 kelliott@mis-ke-lnx:~$dpkg -l |grep libattr1 ii libattr1 1:2.4.44-2 Extended attribute shared library kelliott@mis-ke-lnx:~$file /lib/libattr.so.1 /lib/libattr.so.1: symbolic link to `libattr.so.1.1.0' kelliott@mis-ke-lnx:~$file /lib/libattr.so.1.1.0 /lib/libattr.so.1.1.0: ELF 64-bit LSB shared object,x86-64,version 1 (SYSV),dynamically linked,stripped
正如你所看到的,我们的好朋友ls有很多与之相关的图书馆.如果我没记错的话,libattr.so.1会处理文件属性.对它进行apt-file搜索表明它是由两个软件包ia32-libs和libattr1安装的(一个用于32位,一个用于64位).在我的系统上,看起来libattr1软件包(版本1:2.4.44-2)安装了libattr.so共享对象文件,经过进一步调查,版本为1.1.0.