你好,游客 登录 注册 搜索
背景:
阅读新闻

学习下Linux中的库

[日期:2007-08-22] 来源:Linux公社  作者:Linuxidc [字体: ]
  soname
  形式一般为lib.so.,以symbol link的方式存在于文件系统中,version的不同反映了接口的改变,其指向的实际文件的名字通常是在soname后加上..

  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的路径,不过ld并不只是在该option指定的路径搜索,具体ld搜索required shared library的各个位置和顺序在man里有详细的说明。linux
相关资讯       Linux库  库文件 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款