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: