



免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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不同,大部分其他的系统库需要在命令行中显式 版权申明:本站文章均来自网络,如有侵权,请联215,我们收到后立即删除,谢谢! 指定所用的库名。 在/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 ()a的是为了支持较老的a.out格式的可执行文档的 .so的是支持elf格式的可执行文档的库。静态库是指编译连接时,把库文档的代码全部加入到可执行文档中,所以生成的文档较大,但运行时,就不再需要库文档了。动态库正好相反,在编译连接时,没有把库文档的代码加入到可执行文档中,所以生成的文档较小,但运行时,仍需要加载库文档.a是静态库文档,能够用ar 命令生成。 .so是动态库文档,编译时加上指定的选项即可生成,具体选项看相应的系统文档了。 $(CC) $(SHOPT) $(SHLIBS) a.o b.o -o lib$(DBBUILDTAIL)假设您有test1.c test2.c test3.c , 编写成动态链接库 1. 先编译成test1.o test2.o test3.o 2. gcc -shared -W1, -soname,libvTest.so.1 -o libvTest.so.1.0 *.o 我给
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 达美乐考试题及答案
- 建设焊工考试试题及答案
- 公派留学协议书
- 基础刑法考试试题及答案
- 中国三聚氰胺聚磷酸盐项目创业投资方案
- 2025年社会调查报告集合八-1
- 腾讯分销协议书
- 中国汽车涂料项目商业计划书
- 城市景观考试题目及答案
- 中国脱硝钛白粉项目经营分析报告
- 白蚁防治投标方案(完整技术标)
- 人教版四年级上册《劳动》教案
- 部编版四年级上册语文《王戎不取道旁李》PPT说课课件
- 校园零星维修服务 投标方案
- 年产9万吨苯酚丙酮车间氧化工段工艺设计
- 古代汉语词的本义和引申义
- TDSHXH 002-2022 工业干冰规程
- HY/T 0306-2021产业用海面积控制指标
- GB/T 40851-2021食用调和油
- 加州旅馆原版吉他谱(完整版)
- 实用新型专利申请文件课件
评论
0/150
提交评论