形式一般为lib
ldd/ldconfig
一个程序/shared库一般都要依赖其他的一些库,这可以用ldd来查看,它列出了依赖的库的soname,因为实际依赖是库的接口,而soname正是反映了库的接口信息。linux使用ELF作为可执行程序和库的格式,这些依赖的库的soname保存在ELF的某个fileld里。当一个可执行程序执行时,ld.so负责把它所依赖的shared库加载到内存并链接,它按照以下顺序寻找shared库:
在LD_LIBRARY_PATH环境变量指定的目录下
ld.so.cache文件该shared库对应的文件
/usr/lib和/lib目录下
ldconfig 建立或更新soname,并把其对应关系写入缓存文件ld.so.cache以加快加载速度,ld.so将主要使用这个ld.so.cache来寻找库文件,所以当拷贝shared库到一个不是/usr/lib和/lib的目录后,要运行ldconfig更新ld.so.cache以使ld.so能找到这个shared库。ldconfig能够建立和更新soname是因为ELF文件有一个field保存了其对应的soname。
ld
ld是GNU linker,是创建一个可执行程序/库最后一步使用的工具。
-shared
创建一个shared library
-L
ld在一个目录列表里搜索要连接的archive文件,该选项添加指定目录到缺省目录列表的前面。缺省目录列表依赖ld使用的模拟模式,gcc里有个选项-print-search-dirs可以列出当前系统的缺省目录列表。
-l
添加
-rpath-link
当用ld创建一个静态可执行程序(non-shared, non-relocatable,不依赖其他shared library独立运行)时,其输入的shared library(直接依赖)可能又依赖另外的shared library,如果不把这种间接依赖的shared library也包括到静态可执行程序里,其结果就不能独立运行。这个option指定了搜寻这种required shared library的路径,不过ld并不只是在该option指定的路径搜索,具体ld搜索required shared library的各个位置和顺序在man里有详细的说明。
carlote 于 2007-11-12 23:06:16发表:
感谢,拷走了...