Linux静态库的生成与使用

Linux 2015年04月15日

Linux

Linux类库

Linux下类库主要有静态库和动态库两种库。

  • 静态库
  • 动态库

其中,静态库在程序连接的时候会自 动的连接到程序里,所以一但编译完成,静态库也就不需要了。静态库通常以.a结尾。例如:libutil.a libuuid.a libz.a等。

而动态库在程序编译时并不会被连接到目标代码中,而是在程序运行是才被载入,因此在程序运行时还需要动态库存在。通常以.so结尾。 如:libz.so。

因此,静态库相对于共享库来说有更高的效率但是也要消耗更多的空间。值得注意的是,如果既有静态库又有动态库,在编译时默认的使用动 态库。枫竹梦在本文主要讨论静态库的创建和使用。

使用静态库

  1. 如果是标准C语言库可以不指定其库路径和库名称。
  2. 如果静态库处于/lib/usr/lib
    • gcc -o test test.c /usr/lib/libm.agcc -o test test.c -lm
    • 他们的效果相同。-lm意味着命名为libm.a或libm.so的文件(注意Linux下的库文件都要以lib开头)。
  3. 如果要指定静态库所在的路径
    • 可以gcc test.c -L/usr/lib -lm

创建静态库

1.编写库文件

// testlib.c
#include <stdio.h>
void f()
{
    printf("Welcome to furzoom.com\n");
}

2.编写头文件

编写一个头文件用于声明使用的函数。

// testlib.h
void a();

3.编译testlib.c

gcc -c testlib.c

生成testlib.o文件。

4.用ar创建一个归档文件

ar crv libfur.a testlib.o

生成libfur.a文件。

5.在某些系统中还要为静态库生成一个内容表

ranlib libfur.a

6.使用该静态库

编写如下测试程序:

// test.c
include "testlib.h"

int main(int argc, char *argv[])
{
    f();
    return 0;
}

 

[root@furzoom lib]$ gcc -o test test.c -L. -lfur
[root@furzoom lib]$ ./test
Welcome to furzoom.com
[root@furzoom lib]$

就可以正常生成和使用表态库了。(完)

如无特别说明,本站文章皆为原创,若要转载,务必请注明以下原文信息:
日志标题:《Linux静态库的生成与使用》
日志链接:http://furzoom.com/linux-create-and-use-static-lib/
博客名称:枫竹梦

发表评论

插入图片

NOTICE1:请申请gravatar头像,没有头像的评论可能不会被回复!

回到顶部