快速业务通道

Linux中的静态链接库分析与使用

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-20

  在C语言的层面上,对代码的重复利用通常是通过库(library)的方式来实现的.传统意义上的库指的是以后缀.a结尾的文件.严格来讲,函数库应当分为两种:静态链接库和动态链接库,也称动态共享库.静态链接库通常是指以.a为后缀的文件,而动态链接库则常常以.so为后缀名.

  静态链接库其实就是把一个或多个目标文件(即编译生成的.o文件)归档在一个文件中.此后,当需要使用这个静态库中的某个功能时,将这个静态库与要生成的应用程序链接在一起.

  在Linux上平台上最常用的归档工具是GNU的tar,但是要构建静态库却不能使用tar,而要使用另一个工具ar.tar和ar都是归档工具,但是它们的目的是不同的.tar仅仅是用来创建归档文件(即通常以.tar为后缀的文件)的,ar也完成上述工作,但是做了一些额外的处理,它会为被归档的目标文件中的符号建立索引,当和应用程序链接时,建立的这些索引将回收链接过程.

  ar的作用是把多个目标文件打包到一个归档文件中,每一个目标文件都是归档文件的一个成员.被归档文件的各种属性,如文件内容.访问权限.时间戳和拥有者ID等信息也都保存在归档文件中,当从归档文件中抽取出原来的目标文件时,这些属性也都可以恢复出来.除了创建和抽取两种动作外,也可以对归档文件执行追加.修改和删除等操作.ar命令语法用法:

  ar [-]p[mod][membername] [count] archive files...

  在上述命令行语法中,archive表示的是归档文件的名字,如可以将其指定为libavi.a,archive files 指的是要操作的归档成员,可以有多个.ar命令行上的p指代的是如下字符,它指定了ar执行何种操作.

  d:从库中删除模块.按模块原来的文件名指定要删除的模块.如果使用了任选项v则列出被删除的每个模块.

  m:该操作是在一个库中移动成员.当库中如果有若干模块有相同的符号定义(如函数定义),则成员的位置顺序很重要.如果没有指定任选项,任何指定的成员将移到库的.也可以使用''a'',''b'',或''I''任选项移动到指定的位置.

  p:显示库中指定的成员到标准输出.如果指定任选项v,则在输出成员的内容前,将显示成员的名字.如果没有指定成员的名字,所有库中的文件将显示出来.

  q:快速追加.增加新模块到库的结尾处.并不检查是否需换.''a'',''b'',或''I''任选项对此操作没有影响,模块总是追加的库的结尾处.如果使用了任选项v则列出每个模块. 这时,库的符号表没有更新,可以用''ar s''或ranlib来更新库的符号表索引.

  r:在库中插入模块(替换).当插入的模块名已经在库中存在,则替换同名的模块.如果若干模块中有一个模块在库中不存在,ar显示一个错误消息,并不替换其他同名模块.默认的情况下,新的成员增加在库的结尾处,可以使用其他任选项来改变增加的位置.

  t:显示库的模块表清单.一般只显示模块名.

  x:从库中提取一个成员.如果不指定要提取的模块,则提取库中所有的模块.

  在ar工具的操作模式选项之后,还可以紧跟一些修饰选项,即命令行语法中的mod,这些选项进一步控制着ar的行为.主要的修饰选项有下面这样的一些,注意:它们和操作模式选项之间没有任何空格和其他分隔符.

  a:在库的一个已经存在的成员后面增加一个新的文件.如果使用任选项a,则应该为命令行中membername参数指定一个已经存在的成员名.

  b:在库的一个已经存在的成员前面增加一个新的文件.如果使用任选项b,则应该为命令行中membername参数指定一个已经存在的成员名.

  c:创建一个库.不管库是否存在,都将创建.

  f:在库中截短指定的名字.缺省情况下,文件名的长度是不受限制的,可以使用此参数将文件名截短,以保证与其它系统的兼容.

  i:在库的一个已经存在的成员前面增加一个新的文件.如果使用任选项i,则应该为命令行中membername参数指

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号