Linux链接库简介
作者 佚名技术
来源 Linux系统
浏览
发布时间 2012-04-16
Linux链接库简介
最近要考linux编程,发现linux库这个东西,怎么也无法理解,在网上兜了一大圈,看了很多东西,才算模模糊糊搞懂了,下面把自己总结的东西贴上来与大家共享:
在linux系统中,可将多个目标文件打包成库文件,以便在编程时随时调用,而不必重新编写或定义,这种包称为库函数.库文件是一些预先编译好的函数的集合,那些函数都是按照可再使用的原则编写的.它们通常由一组互相关联的用来完成某项常见工作的函数构成.比如用来处理屏幕显示情况的函数(curses库)等.
1.基础知识: linux下GCC在编译程序时要经历预处理,编译,汇编和连接四个阶段. 预处理阶段,主要处理#include和#define,它把#include包含进来的.h 文件插入到#include所在的位置,生成.i文件; 编译阶段,是最重要的阶段,在这个阶段GCC检查语法然后把文件转换成汇编程序,生成.s文件;上面这两步的输出文件都是文本文件,我们可以用诸如cat的文本处理等命令阅读这些输出文件; 汇编阶段,把*.s文件翻译成二进制机器指令文件*.o,需要反汇编工具如GDB的帮助才能读懂它; 连接阶段,gcc在这个阶段把所有的*.o文件连接成一个可执行文件,库文件的连接也在这步完成. 2. 标准库与非标准库 库函数可分为标准与非标准(自定义)库两大类. (1)标准库文件是公用的,系统中的任何用户都可以利用这些库函数,一般保存在/lib或者/usr/lib目录里,并以头文件的方式提供包含调用.编译时要告诉C语言编译器(更确切地说是链接程序)应去查找哪些库文件,默认情况下,它只会查找标准库文件.
标准库在使用时,gcc等编译程序能够自动连接,在只需要包含其定义的头文件即可,如libc.a.libc.a为标准C函数库,它包含了诸如内存管理或者输入输出操作的基本函数. (2)非标准库在连接时,加上-lname(name为去掉lib和尾部的.a或.so后的库名)参数;非标准库可以放在任意目录中,一般放于当前目录中,但当放置在非系统默认搜索路径中时,需要用-Ldir(dir为路径名称)指定搜索路径. 例如,数学函数并不是C标准库的组成部分,他们是由数学库/usr/lib/libm.a所定义的,因而在使用该库中的数学函数时,除了用#include<math.h>将头文件/usr/include/math.h加入到程序文件中,还要明确的用gcc的-lm选项来连接这个库(数学库libm.a放置在系统默认的库搜索路径/usr/lib中,因而不需要-Ldir参数). 3. 静态库与共享库 函数库一般分为静态和共享(也称动态库)两种格式,库文件遵守一定的命名规则,库文件的名字永远以lib打头,随后是说明函数库情况的部分(比如用c表示这是一个 C语言库,而m表示这是一个数学运算库等).文件名的部分以一个句点(.)开始,然后给出这个库文件的类型,.a为静态库文件,.so和.sa为共享型库文件.无论动态库还是静态库都需要用.o文件来生成. 一般 Linux 系统把 /lib 和 /usr/lib 两个目录作为默认的库(动态库或静态库)搜索路径,使用这两个目录中的库时不需要进行设置搜索路径即可直接使用.对于处于默认库搜索路径之外的库,需要将库的位置添加到库的搜索路径之中(如修改环境变量),也可以在程序连接时,通过-L参数来指定. 但在运行时,程序还需要连接动态库,因而,对于动态库,最好还是将库的位置添加到库的搜索路径之中或是把所用的库拷贝到系统默认的库搜索目录中.静态库则无此限制.
(1)静态库 静态库也叫做档案(archive),文件名按惯例都以.a结尾,比如C语言标准库/usr/lib/libc.a,X11库/usr/X11R6/lib/libX11.a等.它所包含的成员是若干.o文件,静态库中的各个成员(.o文件)没有特殊的存在格式,仅仅是一个.o文件 |
||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
上一篇: 在Linux下进行C开发时要注意的事项下一篇: 自己动手做一个小Linux
关于Linux链接库简介的所有评论