Tuesday, July 06, 2010

[Linux]动态链接库相关命令

Linux下动态链接库的管理
ldconfig 管理系统中的动态链接库文件

ldconfig这个命令会在“特定的路径”下搜寻可以共享的动态链接库文件(在Linux底下格式为lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和cache文件.这里"特定的路径"指/lib和/usr/lib这些默认路径以及动态库配置文件/etc/ld.so.conf内所列的目录以及文件.

如果刚刚安装了一个lib之后,相关文件仍然说找不到,可能是动态链接文件的cache没有更新.可以ldconfig把ld.so的cache更新一下:
ldconfig
只处理foo文件夹下的动态链接文件(前面描述的特定路径下就不处理了)
ldconfig -n foo
显示当前cache的动态链接文件
ldconfig -p

ldd
作用: 查看可执行文件需要的动态链接库
例子:
>ldd /bin/ls
 linux-vdso.so.1 =>  (0x00007fff549ff000)
 librt.so.1 => /lib/librt.so.1 (0x00007fd82409c000)
 libselinux.so.1 => /lib/libselinux.so.1 (0x00007fd823e7e000)
 libacl.so.1 => /lib/libacl.so.1 (0x00007fd823c75000)
 libc.so.6 => /lib/libc.so.6 (0x00007fd8238f2000)
 libpthread.so.0 => /lib/libpthread.so.0 (0x00007fd8236d5000)
 /lib64/ld-linux-x86-64.so.2 (0x00007fd8242c8000)
 libdl.so.2 => /lib/libdl.so.2 (0x00007fd8234d0000)
 libattr.so.1 => /lib/libattr.so.1 (0x00007fd8232cb000)


是否应该使用环境变量LD_LIBRARY_PATH?
答案是no.尽量不要设置这个变量.理由参见http://linuxmafia.com/faq/Admin/ld-lib-path.html


Mac下的动态链接
ldd对应otool

Ref
http://wiki.linuxquestions.org/wiki/Library
http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html

No comments: