[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: 如何知道一个程序用到了哪些库



-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Wang Xu 写道:
> 在 06-11-18,bakefish<yellowfool@gmail.com> 写道:
>> 如题,一个程序我怎么才能知道用到了哪些库
>
> 参考 《Debian新维护人员手册》 4.1:
>
> 要想知道你的软件在编译的时候需要用到哪一个软件包,可以通过下面的方法:
>
>       strace -f -o /tmp/log ./configure
>       # or make instead of ./configure, if the package doesn't use
> autoconf
>       for x in `dpkg -S $(grep open /tmp/log|\
>                           perl -pe 's!.* open\(\"([^\"]*).*!$1!' |\
>                           grep "^/"| sort | uniq|\
>                           grep -v "^\(/tmp\|/dev\|/proc\)" )
> 2>/dev/null|\
>                           cut -f1 -d":"| sort | uniq`; \
>             do \
>               echo -n "$x (>=" `dpkg -s $x|grep ^Version|cut -f2
> -d":"` "), "; \
>             done
>
> 要准确地找到构建/usr/bin/foo所需要的软件包,执行:
>
>       objdump -p /usr/bin/foo | grep NEEDED
>
> 而要列出每一个库,如libfoo.so.6,执行:
>
>       dpkg -S libfoo.so.6
>
> 现在你已经安装了"Build-deps"一项列出的每一个-dev软件包。如果你使用
> ldd来完成这个任务,它会把并非直接使用的库也报告出来,导致过多的构造
> 依赖。
我怀疑他在说这个
root@debian:~# ldd /bin/ls
        linux-gate.so.1 =>  (0xffffe000)
        librt.so.1 => /lib/tls/i686/cmov/librt.so.1 (0xa7ed9000)
        libacl.so.1 => /lib/libacl.so.1 (0xa7ed3000)
        libselinux.so.1 => /lib/libselinux.so.1 (0xa7ebe000)
        libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xa7d8d000)
        libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xa7d7b000)
        /lib/ld-linux.so.2 (0xa7ef8000)
        libattr.so.1 => /lib/libattr.so.1 (0xa7d76000)
        libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xa7d72000)
        libsepol.so.1 => /lib/libsepol.so.1 (0xa7d31000)


- --
与其相濡以沫,不如相忘于江湖
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFFXqAqOhzb4WnHl2oRAhvsAKCFqHIPRKnGWbODOo7JSkeG5Xe6iwCdF+r2
Rzh+6obrNCmJMeK/n/gaVTE=
=ydxD
-----END PGP SIGNATURE-----



Reply to: