静态库

预备知识:

1、头文件
可以使用-I标志来包含保存在子目录或者非标准位置中的头文件,例如
gcc -Iusr/openwin/include fred.c

2、库文件

仅仅把库文件放在标准目录中,就希望编译器能够找到它是不够的,库文件必须遵循特定的命名规范并且需要在命令行中明确指定。

(1)、静态库
也称作归档文件(archive),后缀名.a,
例如:
gcc -o fred fred.c /usr/lib/libm.a
对源文件fred.c进行编译,将编译产生的文件命名为fred,并且引用libm.a库文件
例如:
gcc -o fred fred.c -lm
-lm代表的是标准目录(本例是/usr/lib)内名为libm.a的函数库,-lm有一个好书是如果有共享库,编译器会自动选择共享库
虽然库文件和头文件一样,一般都保存在标准位置,但你也可以通过使用-L标志位编译器增加库的搜索路径
gcc -o x11fred -Lusr/openwin/lib x11fred.c -lx11
这条命令用/openwin/lib下的libx11函数库来编译和链接程序x11fred

(2)so代表共享库函数(动态链接库)
3、归档命令ar

4、静态库实验
(1)建立源文件fred.c和bill.c

//fred.c
#include<stdio.h>
void fred(int a)
{
printf("you passed %d\n", a);
}

//bill.c
#include<stdio.h>
void bill(char *arg)
{
printf("you passed %s\n", arg);
}

(2)编译生成目标文件
gcc -c fred.c bill.c
-c使编译器仅仅编译程序,不进行链接操作

(3)编写头文件
//lib.h
void fred(int a);
void bill(char *arg);

(4)编写调用程序
//main.c
#include "lib.h"
int main(void)
{
bill("hello");
return 0;
}

(5)下面可以在一个步骤内完成编译和链接该程序的工作,也可以将编译和链接分开,下面是分开操作的
gcc -c main.c
gcc -o main main.o bill.o
./main
输出 you passed hello

(6)创建归档文件
ar crv libf.a bill.o fred.o

(7)使用库文件编译
gcc -o main main.o libf.a
或者
gcc -o main -L. main.o -lf

原文地址:https://www.cnblogs.com/zzj2/p/3008924.html