Chinaunix首页 | 论坛 | 博客
  • 博客访问: 670071
  • 博文数量: 87
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2022
  • 用 户 组: 普通用户
  • 注册时间: 2014-04-23 11:16
个人简介

西邮大三狗!!!

文章分类

全部博文(87)

文章存档

2015年(47)

2014年(40)

分类: LINUX

2014-11-01 17:58:54

一  为什么要使用库
    库是一种软件组件技术,库里面封装了数据和函数,提供给用户程序调用。库的使用可以使程序模块化,
提高程序的编译速度,实现代码重用,使程序容易升级。因此,对于软件开发人员来说,掌握这项技术是很有必要的。

    windows系统本身提供并使用了大量的库,包括静态链接库(.lib文件)和动态链接库(.dll文件)。相对应的,
linux操作系统也使用库。linux系统中,通常把库文件存放在/usr/lib(64位系统是lib64)或/lib目录下。linux库文件由
前缀lib、库名以及后缀3部分组成,其中动态库以.so作为后缀,而静态库以.a作为后缀。

    在程序中使用静态库和动态库时,载入顺序是不一样的。静态库的代码在编译时就拷贝到应用程序中,
因此当多个应用程序同时引用一个静态库函数时,内存中将会有调用函数的多个副本。这样的优点就是节省编译时间。
而动态库是在程序开始运行后调用库函数时才被载入,被调用函数在内存中只有一个副本,并且动态库可以在运行程序
期间释放动态库所占用的内存,腾出空间供其他程序使用。现在我们就来介绍静态库和动态库的创建与使用。


二  静态库的创建与使用
    创建静态库的步骤如下:
    (1)在一个头文件中声明静态库所导出的函数
    (2)在一个源文件中实现静态库所到处的函数
    (3)编译源文件,生成可执行代码
    (4)将可执行代码所在的目标文件加入到某个静态库中,并将静态库拷贝到系统默认的存放库文件的目录中
    头文件  testlib.h
    
    对用头文件testlib.h的源文件testlib.c
    
    编译testlib.c生成目标文件
    然后将目标文件加入到静态库,静态库为libtestlib.a
    将静态库拷贝到linux的库目录(/usr/lib或/lib(注意64位机器时lib64))
    
    现在我们写一个测试程序来测试我们刚刚创建的静态库吧=。=
    
    编译这个程序,然后运行看看。
    
    那么现在就要注意咯! -ltestlib中-l为选项,testlib为库名。testlib时“libtestlib.a”的中间部分,linux下约定所有库都以前缀lib开始,
静态库以.a结尾,动态库以.so结尾

在我们编译程序时,无需带上前缀和后缀。

三  动态库的创建与使用
    在linux环境下,可以很方便的创建和使用动态链接库。只要在编译函数库源程序时加上-shared选项即可,这样所生成的可执行程序
就为动态链接库。从某种意义上来说,

动态链接库也时一种可执行程序。
    下面我们把上面那个testlib.c创建成一个动态库,只需一条命令即可,方便吧
    
    动态库创建好后就可以使用了,我们有两种方式调用动态库链接库中的函数。
    第一种如下:
    gcc -o test test.c  ./libtestlib.so
    第二种如下L
    cp libtestlib.so /usr/lib64
    gcc -o test test.c /usr/lib64/libtestlib.so
    我们使用第二种吧!
    
    这里有一点我们需要注意的是:   引用动态链接库时,必须含有路径,如果只是使用libtestlib.so,则必须确保这个库所在目录包含在PATH环境变量中!



阅读(3263) | 评论(2) | 转发(1) |
给主人留下些什么吧!~~

silence06072014-11-26 21:06:42

linux_player_c:现在总结的越来越好了,加油。这状态明年找实习没问题。

一起加油,一起努力哈

回复 | 举报

linux_player_c2014-11-26 11:36:42

现在总结的越来越好了,加油。这状态明年找实习没问题。