赞
踩
对于静态库 :(linux)
首先如何建立一个静态库,静态库有什么作用,静态库有什么优点和缺点,如何使用。
1.如何建立一个静态库:
在终端中输入:
ar -r lib库名.a <文件.o> <文件.o>......
注意 :
在这里首先要注意一下
libmyku.a 这是一个静态库
myku 这是一个库名
扩充 建立静态库 :
ar 参数
-t lib库名 .a 显示库中文件名(目标文件)
-x lib库名.a分解库,把目标文件全部显示出来,库不会消失,如果目标文件相同会被后者覆盖。
-q lib库名.a在静态库末尾追加目标文件。
-r lib库名.a创建库,如果存在,覆盖
-d lib库名.a 目标文件.o从库中删除目标文件
作为一个库 首先必须在前面加上 lib 这三个字母,(非常重要)。
但是作为一个静态库 ,你在这个文件的最后要加上 .a 这个扩展名
这些都是必须遵守的。
上面的 <文件.o> 是机器码,可以说成是计算机语言,但是这样的语言我们是看不懂的,只有计算机能看懂
简单说一下如何得到这样文件的。
gcc -E 文件.c -o 文件.i 对文件进行预处理
gcc -S文件.i ->文件.s 生成汇编文件
gcc -c文件.s ->文件.o 生成计算机语言
gcc 文件.o-> a.out生成能运行的文件。
其实如果想直接生成 .o 文件也可以不用这样,直接使用
gcc -c 文件.c -> 文件.o
这样就可以直接生成 文件.o
2.静态库有什么用 ?
其实这个问题是最关键的,如果他不能用,我们就白忙活了。
同学,你是不是因为文件过多,同时编译的时候而困扰。
其实静态库就是干这样的事情的,
在你写的.c 文件中(我学习的是c语言),可能有你经常使用的函数,或者是功能相同的函数,或者是
结构体定义,你可以把这些函数或者是结构体都进行打包,也就是进行静态库创建,以后你在想使用这些函数
或者是结构体的时候就不用再次定义了,直接调用就可以了。
3.创建一个静态库有什么优点和缺点?
首先在这里要区分一下静态库和共享库(动态库) 这两个是两个对立的库,都可以实现上面的功能,但是
这两个库最后执行的方法是不一样的,在使用静态库生成 a.out 的时候,他会把静态库中的所有代码都放入
a.out中,而且在编译的时候就把他把静态库中所有的代码放入a.out中,无论这个代码对于最后的执行有没有用
这样做就会花费大量空间。对于共享库就不一样了,他是在代码运行的时候插入代码,而且是只插入有关
的代码,其他的不需要,在运行的时候,动态库花费的时间多,但是占用空间小。
总结一下 :
静态库 : 运行时间少,空间大,运行时没有关联
动态库 : 运行时间长,空间小,运行时有关联
察看库中内容和库的关联性:
nm lib库名.a
显示库中函数内容 :
1.函数没有在库中定义,需要其他库进行支持。(T)
2.函数在库中定义了,不需要其他库进行支持(U)
3.虽然被定义了,但是会被其他库中相同函数名给覆盖(W)
4.如何使用静态库?
在这里我要说明三种方法 :(其实我就会三种,多了也不会)
1.gcc main.o lib库名.a
这种方法简单粗暴,这样不好不好,不推荐使用。
2.gcc main.o -l库名 -L<库路径>
注意在这里就不需要lib 和 .a ,只需要库名,库路径是相对路径和绝对路径都可以。
这种方法推荐使用
3. export LIBRARY_PATH=$LIBRARY_PATH:库路径
gcc main.o -l库名
这种方法首先要进行环境变量的设置,如果使用这样的方法只能在本次终端中使用,如果
你重新打开了一个新的终端,这个环境变量就需要重新设置,如果不想这样一直设置,就
需要更改~/.bashrc 文件,在文件最后加上那句话,之后重新启动电脑,或者
source ~/.bashrc
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。