库的概念:
将多个目标文件打包到一起,形成一个文件就叫库(library)
创建静态库:
创建源文件:mymath.c
double add(double a,double b)
{
return a + b;
}
double sub(double a,double b)
{
return a - b;
}
生成目标文件:
gcc -c mymath.c //生成mymath.o文件
创建源文件:view.c
#include <stdio.h>
void print(double d)
{
printf("%d\n",d);
}
生成目标文件:
gcc -c view.c //生成view.o
使用命令 ar -r 将目标文件打包成j静态库
arr -r libmyku.a mymath.o view.o //生成的库必去以lib开头,库名为myku
创建头文件mymath.h,用来声明函数:在C语言中调用函数必须声明函数,预防隐式声明的发生
#ifndef MYMATH_H
#define MYMATH_H
double add(double,double);
double sub(double,double);
void print(double);
#endif
编写测试程序:test.c
//在调用函数前首先声明函数,防止函数的隐式声明
#include "mymath.h"
main(void)
{
int p = 3;
int c = 5;
//注意函数的隐式声明
//在调用函数前首先声明函数,防止函数的隐式声明
//double add(double,double);
//double sub(double,double);
double res = add(p,c);
double res2 = sub(c,p);
print(res);
print(res2);
}
编译测试文件test.c
gcc -c test.c -I . //生成test.o ;指定头文件的查找路径为当前目录使用 -I
使用静态库:
两种使用方式:
1)直接使用gcc将test.o与静态库连接libmyku.a连接
gcc test.o libmyku.a -o test //生成test可执行文件
2)使用环境变量指定静态库的路径:export LIBRARY_PATH = . //指定静态库的路径为当前路径
使用 gcc -l 指定库名:
gcc test.o -l myku -o test //连接 指定库名(libmyku.a:库名为myku),生成可执行程序:test