欢迎来到天天文库
浏览记录
ID:27573751
大小:169.29 KB
页数:20页
时间:2018-12-03
《linux下创建库函数》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、Linux下创建库函数Bylusterluster@linuxaid.com.cn2001-8-161.介绍使用GNU的工具我们如何在Linux下创建自己的程序函数库?一个“程序函数库”简单的说就是一个文件包含了一些编译好的代码和数据,这些编译好的代码和数据可以在事后供其他的程序使用。程序函数库可以使整个程序更加模块化,更容易重新编译,而且更方便升级。程序函数库可分为3种类型:静态函数库(staticlibraries)、共享函数库(sharedlibraries)和动态加载函数库(dynamicallyloadedlibraries)。静态函数库是在
2、程序执行前就加入到目标程序中去了;而共享函数库则是在程序启动的时候加载到程序中,它可以被不同的程序共享;动态加载函数库则可以在程序运行的任何时候动态的加载。实际上,动态函数库并非另外一种库函数格式,区别是动态加载函数库是如何被程序员使用的。后面我们将举例说明。木文桂主要参考ProgramLibraryHOWTO,作者是luster(hwang@ustc.edu),任何非商业H的的再次发行本文档都是允许的,但是请保留作者信息和本版权声明。本文档首先在www.linuxaid.com.cn发布。2.静态函数库静态函数库实际上就是简单的一个普通的0标文件的集
3、合,一般来说习惯用“.a”作为文件的后缀。可以用ar这个程序来产生静态函数库文件。Ar是archiver的缩写。静态函数库现在已经不在像以前用得那么多了,主要是共享函数库与之相比较有很多的优势的原因。慢慢地,大家都喜欢使用共享函数库了。不过,在一些场所静态函数库仍然在使用,一來是保持一些与以前某些程序的兼容,二来它描述起来也比较简单。静态库函数允许程序员把程序link起来而不用重新编译代码,节省了重新编译代码的时间。不过,在今天这么快速的计算机面前,一般的程序的重新编译也花费不了多少时间,所以这个优势已经不是像它以前那么明显了。静态函数库对开发者来说还
4、是很有用的,例如你想把自己提供的函数给别人使用,但是又想对函数的源代码进行保密,你就可以给别人提供一个静态函数库文件。理论上说,使用ELF格式的静态库函数生成的代码可以比使用共享函数库(或者动态函数库)的程序运行速度上快一些,大概1一5%。创建一个静态函数库文件,或者往一个己经存在地静态函数库文件添加新的目标代码,可以用下面的命令:arresmy_library.afilel.ofile2.o这个例子屮是把目标代码filel.o和file2.o加入到my_library.a这个函数库文件中,如果myjibrary.a不存在则创建一个新的文件。在用ar命
5、令创建静态库函数的时候,还有其他一些可以选择的参数,可以参加ar的使用帮助。这里不再赘述。一旦你创建了一个静态函数库,你可以使用它了。你可以把它作为你编译和连接过程屮的一部分用来生成你的可执行代码。如果你用gcc来编译产生可执行代码的话,你可以用“-I”参数来指定这个库函数。你也可以用Id来做,使用它的“-I”和“-L”参数选项。具体用法,可以参考info:gcc。3.共享函数库共享函数库中的函数是在当一个可执行程序在启动的时候被加载。如果一个共亨函数库正常安装,所有的程序在重新运行的时候都可以白动加载最新的函数库中的函数。对于Linux系统还奋更多的
6、可以实现的功能:0升级了函数库但是仍然允许程序使用老版木的函数库。0当执行某个特定程序的时候可以覆盖某个特定的库或者库中指定的函数。0可以在库函数被使用的过程中修改这些函数库。3.1.—些约定如果你要编写的共享函数库支持所有有用的特性,你在编写的过程中必须遵循一系列约定。你必须理解库的不同的名字间的IX别,例如它的“soname”和“realname”之间的区别和它们是如何相互作用的。你同样还要知道你应该把这些库函数放在你文件系统的什么位置等等。下而我们具体看看这些问题。3.1.1.共享库的命名每个共享函数库都有个特殊的名字,称作“soname”。So
7、name名字命名必须以“lib”作为前缀,然后是函数库的名字,然后是“.so”,最后是版本号信息。不过有个特例,就是非常底层的C库函数都不是以lib开头这样命名的。每个共享函数库都有一个真正的名字(“rea
8、name”),它是含真正库函数代码的文件。真名有一个主版本号,和一个发行版本号。最后一个发行版本号是可选的,可以没有。主版本号和发行版本号使你可以知道你到底是安装了什么版本的库函数。另外,还有一个名字是编译器编译的时候需要的函数库的名字,这个名字就是简单的soname名字,而不包含任何版木号信息<>管理共享函数库的关键是区分好这些名字。当可执行程序
9、需要在自己的程序中列出这些他们需要的共享库函数的时候,它只要用soname就可以了;反过来,当
此文档下载收益归作者所有