linux库学习.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
linux库学习

Linux和Unix静态库,动态库和共享库 1 linux下的静态库和动态库的编译 2 Linux和Unix静态库动态库 库可以有三种使用的形式:静态、共享和动态。静态库的代码在编译时就已连接到开发人员开发的应用程序中,而共享库只是在程序开始运行时才载入,在编译时, 只是简单地指定需要使用的库函数。动态库则是共享库的另一种变化形式。动态库也是在程序运行时载入,但与共享库不同的是,使用的库函数不是在程序运行开 始,而是在程序中的语句需要使用该函数时才载入。动态库可以在程序运行期间释放动态库所占用的内存,腾出空间供其它程序使用。由于共享库和动态库并没有在 程序中包括库函数的内容,只是包含了对库函数的引用,因此代码的规模比较小。 已经开发的大多数库都采取共享库的方式。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 .a的是为了支持较老的a.out格式的可执行文件的 .so的是支持elf格式的可执行文件的库。 静态库是指编译连接时,把库文件的代码全部加入到可执行文件中,所以生成的文件较大, 但运行时,就不再需要库文件了。动态库正好相反,在编译连接时,没有把库文件的代码加入到可执行文件中,所以生成的文件较小,但运行时,仍需要加载库文件 .a是静态库文件,可以用ar 命令生成。 .so是动态库文件,编译时加上指定的选项即可生成,具体选项看相应的系统文档了。。。。 IBM AIX下如下: $(CC) $(SHOPT) $(SHLIBS) a.o b.o -o lib$@$(

文档评论(0)

xy88118 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档