[置顶] 制作静态库


静态库的制作举例

目标:创建一个小型函数库,该函数库包含两个函数,分别为:fred和bill

1)创建文件fred.c,内容如下:

#include <stdio.h>

void fred(int arg)
{
        printf("fred: you passed %d\n",arg);
}
2)创建文件bill.c,内容如下:

#include <stdio.h>

void bill(char *arg)
{
        printf("bill: you passed %s\n", arg);
}
3)分别编译上述两个文件

rita@rita-desktop:~/linux_program/e1.1_static_lib$ gcc -c fred.c bill.c 
rita@rita-desktop:~/linux_program/e1.1_static_lib$ ls *.o
bill.o  fred.o
rita@rita-desktop:~/linux_program/e1.1_static_lib$ 
4)编写一个程序,该程序调用bill函数。

4.1)先为要创建的库文件创建一个头文件lib.h(这个头文件将声明库文件中的函数) 

void fred(int);
void bill(char *);
4.2) 创建一个调用程序program.c,该程序包含库的头文件lib.h,并且调用库中的函数bill

#include "lib.h"

int main()
{
        bill("hello,world\n");
        return 0;
}

5)编译并测试program.c

 方法一)不使用库文件,而是使用常规的目标模块链接方法。

rita@rita-desktop:~/linux_program/e1.1_static_lib$ gcc -c program.c
rita@rita-desktop:~/linux_program/e1.1_static_lib$ gcc -o program program.o bill.o
rita@rita-desktop:~/linux_program/e1.1_static_lib$ ./program
bill: you passed hello,world

rita@rita-desktop:~/linux_program/e1.1_static_lib$

方法二)
5.1)先将fred.o和bill.o创建为一个静态库libfoo.a
rita@rita-desktop:~/linux_program/e1.1_static_lib$ ar crv libfoo.a fred.o bill.o
a - fred.o
a - bill.o
rita@rita-desktop:~/linux_program/e1.1_static_lib$

5.2)为静态库libfoo.a创建一个内容表
rita@rita-desktop:~/linux_program/e1.1_static_lib$ ranlib libfoo.a
rita@rita-desktop:~/linux_program/e1.1_static_lib$ 

5.3)在编译命令行的文件列表中加入库文件libfoo.a,编译program.c
rita@rita-desktop:~/linux_program/e1.1_static_lib$ gcc -o program program.c libfoo.a
rita@rita-desktop:~/linux_program/e1.1_static_lib$ ./program bill: you passed hello,worldrita@rita-desktop:~/linux_program/e1.1_static_lib$
或者用-l选项使用库文件,编译program.c
rita@rita-desktop:~/linux_program/e1.1_static_lib$ gcc -o program program.c -lfoo
/usr/bin/ld: cannot find -lfoo
collect2: ld returned 1 exit status
rita@rita-desktop:~/linux_program/e1.1_static_lib$

因为库文件libfoo.a并没有保存在标准位置下,所有需要使用-L选项指定库文件所在位置。
rita@rita-desktop:~/linux_program/e1.1_static_lib$ gcc -o program program.c -L. -lfoo
rita@rita-desktop:~/linux_program/e1.1_static_lib$ ./program
bill: you passed hello,world

rita@rita-desktop:~/linux_program/e1.1_static_lib$
至此,表明成功创建了属于自己的静态库!!!

6)nm命令:查看目标文件、函数库或可执行文件里包含的函数
rita@rita-desktop:~/linux_program/e1.1_static_lib$ nm program|grep -v _
08048400 T bill
0804a014 b completed.7021
080483e4 T main
rita@rita-desktop:~/linux_program/e1.1_static_lib$

你可能感兴趣的:([置顶] 制作静态库)