静态库和共享库的基础知识

库是一组预先编译好的函数集合,这些函数需要按照可重用的原则编写,这些函数通常是有关联并执行同一项任务,比如屏幕处理函数库curses和nsurses库.

标准系统库在/lib和/usr/lib中,编译器会自动找到.除此之外的库在使用时需要指定完全路径或用-L/路径和-l标识


静态库和动态库:静态库和动态库是两种共享程序代码的方式,它们的区别是静态库在程序的链接阶段被复制到程序中,程序执行无关;动态库在链接阶段没有被复制到程序中,而是程序在运行时由系统动态加载到内存中以供调用。使用动态库的优点是系统只需载入一次,不同的程序可以得到内存中相同的复本,因此节省了很多内存。


静态库:使gcc -c命令先生成.o文件,再用ar -r命令,将生成的.o文件创建成静态库.a文件

例:ar crv libtest.a a.o b.o

ar即archive,c是create表示创建,r是replacement,表示使用XX文件,v是显示执行过程中的一些信息

在Berkeley UNIX衍生系统中,还需要为函数库生成一个内容表:ranlib XX.a

可以用nm命令来查看程序,目标文件或库所使用的函数


动态库(共享库):动态库在不同系统上实现的方式不同,这里只看unix系统的.

动态库的保存位置与静态库一样,但后缀为.so

一个程序本身不包含共享库中函数的代码,只是在执行时函数引用被解析并调用共享库到内存中.系统只需一份拷贝就可供多个应用程序使用.

动态库的另一个好处是可以独立更新,它的文件名格式是xx.so.数字,数字表示版本号,调用时只需调用他的符号连接xx.so

用ldd命令查看程序中的动态库


静态库.a文件类似windows中的.lib文件,.so文件类似.dll文件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章