3.2.3 静态库
3.2.3.1 概述
库文件的含 :就是一组处于可以“拿来就用”
的状态下的二进制目标代码。当有程序需要用的函
数库中的某个函数的时候,就会通过include语句
引用对此函数做出声明的头文件。编译器和 接程
序负责把程序代码和库函数结合 一起成为一个
独立的可执行程序。如果使用的不是标准的c语言
运行库而是某个扩展库,则必须指定它的位置和名
字 (使用-I,-L和-l参数)。
静态库也叫归档文件,英文archive,后缀名
是a,比如libc.a和libX11.a等。
自己建立归档文件的方法介绍:编写库函数的
时候,尽量把不同类型函数实现编写到不同的源代
码文件里面;然后使用gcc 的编译命令对各个文件
进行独立编译,从而得到各自的目标文件;然后使
用ar命令把各个目标文件打包 一起。
3.2.3.2 举例:如何建立和使用归档文件
1)编写一个小函数库,这个函数库里面有两个
函数。分别使用两个源代码文件。
2)各自代码如下:
――――――――fred.c--------------
#include
void fred(int arg)
{
printf("fred: you passed %d\n", arg);
}
――――――――bill.c--------------
#include
void bill(char *arg)
{
printf("bill: you passed %s\n", arg);
}
3)进行两个源代码文件的编译
$ gcc c bill.c fred.c
$ ls *.o
bill.o fred.o
4)利用ar命令,把目标代码添加到一个库文
件中去。
$ ar crv libfoo.a bill.o fred.o
a bill.o
a fred.o
5)为了让库的使用者可以重复利用库所提供的
函数,要编写一个头文件,在其中声明库都是对外
提供了哪些函数。如果另外一个程序员打算使用库
所提供的服务,则必须 头文件中include这个头
文件。
――――――――lib.h--------------
/*
This is lib.h. It declares the functions
fred and bill for users
*/
void bill(char *);
void fred(int);
6)编写一个测试程序,使用库中的一个函数。
源代码如下:
―――――――program.c--------------
#include "lib.h"
int main()
{
bill("Hello World");
exit(0);
}
7)编译和运行库的测试程序
―――――――第一个方法--------------
$ gcc c program.c
$ gcc o program program.o bill.o
$ ./program
bill%3
阅读(1347) | 评论(0) | 转发(0) |