Linux中库认识

本网站用的阿里云ECS,推荐大家用。自己搞个学习研究也不错

。  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
  添加文件到要连接的archive文件列表。ld将在搜索archive的目录列表里搜索libarchive.so文件,如果不存在则使用libarchive.a文件

  -rpath-link
  当用ld创建一个静态可执行程序(non-shared, non-relocatable,不依赖其他shared library独立运行)时,其输入的shared library(直接依赖)可能又依赖另外的shared library,如果不把这种间接依赖的shared library也包括到静态可执行程序里,其结果就不能独立运行。这个option指定了搜寻这种required shared library的輯div>

未经允许不得转载:演道网 » Linux中库认识

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册