Linux制作静态链接库

来源:互联网 发布:七参数计算软件 编辑:程序博客网 时间:2024/05/21 14:46

库是一种软件组件技术,库里面封装了数据和函数。
Linux库文件通常存放在/usr/lib或/lib目录下。
Linux静态库文件名组成: 前缀lib、库名和后缀.a组成(‘lib*.a’)。
静态库的代码在编译时就拷贝的应用程序中,这样的优点是节省编译时间,当要使用时,连接器会找出程序所需的函数,然后将它们拷贝到执行文件,由于这种拷贝是完整的,所以一旦连接成功,静态程序库也就不再需要了。

静态库是obj文件的一个集合,通常静态库以“.a”为后缀,它的优点是可以在不用重新编译程序库代码的情况下,进行程序的重新链接,这种方法节省了编译过程的时间(在编译大型程序的时候,需要花费很长的时间)。但是由于现在系统的强大,编译的时间已经不是问题。静态库的另一个优势是开发者可以提供库文件给使用的人员,不用开放源代码,这是库函数提供者经常采用的手段。当然这也是程序模块化开发的一种手段,使每个软件开发人员的精力集中在自己的部分。在理论上,静态库的执行速度比共享库和动态库要快(1%~5%)。

//filename:fun.c#include <stdio.h>void fun(void) {    printf("XiyouLinuxGroup\n");}
//filename:main.c#include <stdio.h>//声明函数,可以把所有的声明放到一个"*.h"文件中,然后主函数包含它就可以void fun(void);int main(void) {    printf("hello universe\n");    fun();    return 0;}

1.编译生成目标文件

gcc -c fun.c//生成fun.o文件 

2.用ar归档目标文件,生成静态库

//库文件名格式必须为lib*.aar rcsv libfun.a fun.o//生成libfun.a,可以将此文件拷到/usr/lib或/lib目录下

3.使用静态库时记得链接自己的库

gcc main.c -static -L. -lfun -o main//生成可执行文件main//如果不加-o main,会生成a.out文件gcc -o main main.c libfun.a//效果和上面相同gcc main.c -static -L. -lfun //会生成a.out文件

Note:

-static : 当有动态库和静态库重名时,强制链接静态库

库的文件名必须形如 lib*.a ,这样我们在链接这个库时,就可以用 -l*。
编译器就会在指定的目录中搜索 lib*.a 。

上面的命令中 -L. 告诉 gcc 搜索链接库时包含当前路径, -l* 告诉 gcc 生成可执行程序时要链接 lib*.a

常用选项:
c 创建一个库,如果需要生成新的库文件,不要警告
v 输出详细信息
d:从库中删除成员文件。
r:在库中加入成员文件,若存在,则替换。
s:无论ar命令是否修改了库内容,都强制重新生成库符号表。
4.运行程序

这里写图片描述

1 0
原创粉丝点击