创建和使用库:静态、共享和动态
文章整理:西部数码--专业提供域名注册、虚拟主机服务
作者:Norkai Laboratory
来自:Linux知识宝库
C语言中有一些函数无需进行编译,有一些函数也能够在多个文章中使用。一般来说,
这些函数都会执行一些标准任务,如数据库输入 /输出操作或屏幕控制等。能够事先对这些
函数进行编译,然后将他们放置在一些特别的目标代码文档中,这些目标代码文档就称为库。
库文档中的函数能够通过连接程式和应用程式进行连接。这样就不必在每次研发程式时都对
这些通用的函数进行编译了。
不同类型的应用程式将会使用不同的函数库。例如:libdbm库中组包含了对数据库文档
进行访问的dbm函数,需要对数据库进行操作的程式就会和该库进行连接。数学应用程式将
使用数学库libm,X-Windows应用程式将使用Xlib库,libX11。另外,任何的程式都将使用
标准的C函数库。libc,该库中包含了内存管理或输入输出操作的基本函数,这些库都
存放在/usr/lib这些系统公用的目录中,系统中的任何用户都能够利用这些库。当然用户也
能够建立自己专用的库函数,供自己或其他指定的人员使用。
库能够有三种使用的形式:静态、共享和动态。静态库的代码在编译时就已连接到研发
人员研发的应用程式中,而共享库只是在程式开始运行时才载入,在编译时,只是简单地指
定需要使用的库函数。动态库则是共享库的另一种变化形式。动态库也是在程式运行时载入,
但和共享库不同的是,使用的库函数不是在程式运行开始,而是在程式中的语句需要使用该
函数时才载入。动态库能够在程式运行期间释放动态库所占用的内存,腾出空间供其他程式
使用。由于共享库和动态库并没有在程式中包括库函数的内容,只是包含了对库函数的引用,
因此代码的规模比较小。
已研发的大多数库都采取共享库的方式。ELF格式的可执行文档使得共享库能够比较容
易地实现,当然使用旧的a.out模式也能够实现库的共享。Linux系统中现在可执行文档的标准
格式为ELF格式。
GNU库的使用必须遵守Library GNU Public License(LGPL许可协议)。该协议和GNU许可协
议略有不同,研发人员能够免费使用GNU库进行软件研发,但必须确保向用户提供所用的库函
数的源代码。
系统中可用的库都存放在/usr/lib和/lib目录中。库文档名由前缀lib和库名连同后缀组
成。根据库的类型不同,后缀名也不相同。共享库的后缀名由.so和版本号组成,静态库的后
缀名为.a。采用旧的a.out格式的共享库的后缀名为.sa。
libname.so.major.minor
libname.a
这里的name能够是任何字符串,用来唯一标识某个库。该字符串能够是个单字、几个字
符、甚至一个字母。数学共享库的库名为libm.so.5,这里的标识字符为m,版本号为5。libm.a
则是静态数学库。X-Windows库名为libX11.so.6,这里使用X11作为库的标识,版本号为6。
使用gcc编译器就能够将库和自己研发的程式连接起来,例如:libc.so.5中包含了标准的输
入输出函数,当连接程式进行目标代码连接时会自动搜索该程式并将其连接到生成的可执行文档
中。标准的输入输出库中包含了许多基本的输入输出函数,如printf函数等。也能够连接其他的
一些系统函数库,如数学库等,但和libc.so.5不同,大部分其他的系统库需要在命令行中显式
指定所用的库名。
在/usr/lib和/lib目录中能够找到绝大多数的共享库。连接时将首先搜索这两个目录。有一
些库也可能存放在特定的目录中,在/etc/ld.conf配置文档中给出了这些目录的列表。连接程式
也会对列出的这些目录进行搜索。在默认情况下,Linux将首先搜索指定库的共享版本,假如找
不到,才会去搜索静态版本。在对共享库进行更新或安装新库后,必须运行ldconfig命令更新
/etc/ld.conf文档中相应的项(假如使用RPM进行安装,一般会自动进行更新,但是也不能确保
这一点)。
在gcc编译器中引用可搜索到的目录中的库文档时,需要使用-l选项和库名。在gcc命令行上
输入-lm能够在程式中连接标准算术库,-l将首先使用libname.so进行搜索,这里是libm.so。下
面的例子将使用算术库创建bookrecs程式,请注意这里的-lm选项。
$ gcc main.c io.c -o bookrecs -lm
系统中更有一些其他可用的库,常用的是libncurses.a库,包含了一些简单的鼠标移动例程。
在命令行中使用-lncurses选项引用libncurses.so库。下面的例子同时调用了数学和光标库。
$ gcc mian.c io.c -o bookrecs -lm -lncurses
在引用其他目录中的库时,需要使用-ldir选项指定该目录。该选项指定了搜索库函数时其
他路径。在下面的例子中,用户在连接时使用了mydir目录中的myio.so库文档。
$ gcc main.c -o bookrecs -lmydir -lmyio (http://www.fanqiang.com)
a的是为了支持较老的a.out格式的可执行文档的
.so的是支持elf格式的可执行文档的库。
静态库是指编译连接时,把库文档的代码全部加入到可执行文档中,所以生成的文档较大,
但运行时,就不再需要库文档了。动态库正好相反,在编译连接时,没有把库文档的代码加入
到可执行文档中,所以生成的文档较小,但运行时,仍需要加载库文档
.a是静态库文档,能够用ar 命令生成。
.so是动态库文档,编译时加上指定的选项即可生成,具体选项看相应的系统文档了。。。。
IBM AIX下如下:
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
Linux 创建和使用库:静态、共享和动态
来源:互联网
作者:west263.com
时间:2008-04-16
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!
Linux 创建和使用库:静态、共享和动态
热点关注
- 快速学习如何搭建一个赚钱
- 什么是CPA、CPC、CPM、CPO
- 论文:Web安全对策研究
- 新手站长35天自学引路
- 站长资讯网第二版上线
- 网络营销网站功能设计的几
- 女站长的建站理财文章
- 也谈域名备案 -- 撤销已存
- 自己动手做网站 个人站长
- 对第一次做网站的朋友说些
- 传统网站逼得Web2.0没法活
- 被K过的域名如何被百度重
- 如何选择理想IDC服务商十
- 技巧:Vimdiff 使用
- 网络创业经历 靠卖域名来
- 如何提高网站流量之小节
- 王晨昀:个人网站为什么要
- 企业开展网络营销存在的误
- 一个失败者谈地方门户的运
- 域名注册与虚拟主机的选购
- SEO360的搜索引擎优化推广
- 网站运营与网络运营的一字
- 做网站要做出自己的个性—
- 中国网站内容不可逾越的三
- 如何将新网及商务中国的域
- 08年,个人站长赚钱将更加
- 保证能增加RSS订阅量的35
- 企业网站英文版制作几个关
- 龚文祥:互联网运营关键词
- 我的行业垃圾站
- 2008最新申请Google adsen
- 虚拟主机的陷阱
- 网站建设发展的几点中肯建
- 企业如何安全高效使用垃圾
- 计算机文件夹删除不掉怎么
IDC资讯
虚拟主机
域名注册
托管租用
vps主机
智能建站
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源
网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧
行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒
网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer
网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash
程序设计 Java技术 C/C++ VB delphi
网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术
操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源
网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧
行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒
网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer
网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash
程序设计 Java技术 C/C++ VB delphi
网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术
操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD



