1.编写子函数
add.c
#include<stdio.h>
int add(int left,int right)
{
return left + right;
}
sub.c
#include<stdio.h>
int sub(int left,int right)
{
return left - right;
}
mul.c
#include<stdio.h>
int mul(int left,int right)
{
return left * right;
}
div.c
#include<stdio.h>
int div(int left,int right)
{
return left / right;
}
2.生成.o文件
gcc -c add.c -o add.o 其中-fPIC选项表示生成与地址无关代码
分别运行四次生成:add.o sub.o mul.o div.o文件
3.生成动态库
执行下列命令
gcc -fPIC --share add.o mul.o sub.o div.o -o libmylib.so
-fPIC选项表示生成与地址无关代码,–share表示生成一个动态库,其中lib是动态库的前缀,.so是后缀,中间的mylib是库名称。
最后生成:
4.生成静态库
执行以下命令
ar -cr libmylib.a add.o mul.o sub.o div.o
ar:静态库生成的链接器。
-c:创建静态库。
-r:模块替换。
libmychild.a中lib是前缀,.a是后缀名,mylib为静态库名。
运行完后生成以下文件:
5.库的使用
静态库与动态库名字相同默认链接动态库
编写四个子函数的头文件(add.h,sub.h,mul.h,div.h),编写main.c
#include <stdio.h>
#include"add.h"
#include"sub.h"
#include"mul.h"
#include"div.h"
int main()
{
int a = 10;
int b = 20;
printf(" a + b = %d\n",add(a,b));
printf(" a - b = %d\n",sub(a,b));
printf(" a * b = %d\n",mul(a,b));
printf(" a / b = %d\n",div(a,b));
return 0;
}
5.1 动态库的使用
1.链接库文件的搜索路径
(1)将要链接的第三方库(libmylib.so),复制到目录 /lib64 /usr/lib64 …
(2)也可以使用export LIBRARY_PATH=.环境变量的设置,来设置库的链接搜索路径
(3)gcc的-L选项,指定链接时库的搜索路径 gcc main.c -o main -L . -lmylib
gcc main.c -o main -L. -lmylib
2.动态库的加载搜索路径
程序运行时,若程序时动态链接生成,运行时需要到指定的目录下加载动态库 /lib64 /usr/lib64 …
5.2 静态库使用
gcc main.c -L -lmychild