c语言静态库:
在linux下,制作C静态库
一、创建两个源文件
fred.c
#include <stdio.h>
void fred(int arg)
{
printf("fred: we passed %d",arg);
exit(0);
}
bill.c
#include <stdio.h>
void bill(char *arg)
{
printf("fred: we passed %s",arg);
exit(0);
}
二、编译成目标文件
gcc -c bill.c fred.c //这样会生成 bill.o fred.o
三、创建头文件
lib.h
void bill(char *arg);
void fred(int arg);
四、调用程序
prog.c
#include <stdlib.h>
#include "lib.h"
int main(){
bill("helo world");
exit(0);
}
五、编译程序
gcc -c prog.c //生成prog.o 目标文件
gcc -o prog prog.o bill.o //生成prog可执行程序
./prog //调用程序
静态库就是archive归档文件,把多个目标文件合成一个大的文件
ar -crv libfoo.a bill.o fred.o //合成一个libfoo.a静态库
有时候伯克利unix需要执行ranlib命令,linux不一定需要,运行也没事
ranlib libfoo.a
使用静态库 编译
gcc -o prog prog.o libfoo.a //生成prog可执行程序
也可以用
gcc -o prog prog.o -L . -lfoo
-L . 代表在 当前目录中查找函数 -lfoo是告诉编译器使用libfoo.a的函数库或者libfoo.so的共享库
备注:可以用nm prog,bill.o 查看程序或者目标文件里调用的函数,c语言里面是允许重复声明的,但不允许重复定义
静态库的缺点是会把函数包含到程序中,造成程序中有很多重复的函数,造成空间和内存的浪费
以上内容来自<<linux程序设计>>