Linux链接库简介
作者 佚名技术
来源 Linux系统
浏览
发布时间 2012-04-16
Linux链接库简介
最近要考linux编程,发现linux库这个东西,怎么也无法理解,在网上兜了一大圈,看了很多东西,才算模模糊糊搞懂了,下面把自己总结的东西贴上来与大家共享:
在linux系统中,可将多个目标文件打包成库文件,以便在编程时随时调用,而不必重新编写或定义,这种包称为库函数.库文件是一些预先编译好的函数的集合,那些函数都是按照可再使用的原则编写的.它们通常由一组互相关联的用来完成某项常见工作的函数构成.比如用来处理屏幕显示情况的函数(curses库)等.
1.基础知识: linux下GCC在编译程序时要经历预处理,编译,汇编和连接四个阶段. 预处理阶段,主要处理#include和#define,它把#include包含进来的.h 文件插入到#include所在的位置,生成.i文件; 编译阶段,是最重要的阶段,在这个阶段GCC ![]() 汇编阶段,把*.s文件翻译成二进制机器指令文件*.o,需要反汇编工具如GDB的帮助才能读懂它; 连接阶段,gcc在这个阶段把所有的*.o文件连接成一个可执行文件,库文件的连接也在这步完成. 2. 标准库与非标准库 库函数可分为标准与非标准(自定义)库两大类. (1)标准库文件是公用的,系统中的任何用户都可以利用这些库函数,一般保存在/lib或者/usr/lib目录里,并以头文件的方式提供包含调用.编译时要告诉C语言编译器(更确切地说是链接程序)应去查找哪些库文件,默认情况下,它只会查找标准库文件.
标准库在使用时,gcc等编译程序能够自动连接, ![]() (2)非标准库在连接时, ![]() 例如,数学函数并不是C标准库的组成部分,他们是由数学库/usr/lib/libm.a所定义的,因而在使用该库中的数学函数时,除了用#include<math.h>将头文件/usr/include/math.h加入到程序文件中,还要明确的用gcc的-lm选项来连接这个库(数学库libm.a放置在系统默认的库搜索路径/usr/lib中,因而不需要-Ldir参数). 3. 静态库与共享库 函数库一般分为静态和共享(也称动态库)两种格式,库文件 ![]() ![]() 一般 Linux 系统把 /lib 和 /usr/lib 两个目录作为默认的库(动态库或静态库)搜索路径, ![]() 但 ![]()
(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链接库简介的所有评论