制作静态库:
1.首先创建一个.c文件,如:mylib.c
lib.c里面的代码如下:
int sub(int x,int y)
{
return (x-y);
}
2.创建mylib.h文件.
代码如下:
int sub(int x,int y);
3.运行以下命令:
gcc -c mylib.c -o mylib.o
ar cqs libmylib.a mylib.o (其中ar是一个制作库的工具,在制作库的时候要注意库的前缀是要lib,lib后面是库的名字,静态库的后缀是.a)
4.将制作好的libmylib.a复制到/usr/lib目录下面。
5.编写另外一个.c文件,如:main.c
代码如下:
#include <stdio.h>
#include "mylib.h"
int main()
{
int temp=0;
temp = sub(5,3);
printf("the sub is %d\n",temp);
return 0;
}
6.使用静态库:
gcc main.c -static -lmylib -o main (在使用库的时候,-l是lib的简写,后面跟库的名字)
./main
动态链接库的制作:
1.首先创建一个.c文件,如:mylib1.c
lib1.c里面的代码如下:
int add(int x,int y)
{
return (x+y);
}
2.创建mylib1.h文件.
代码如下:
int add(int x,int y);
3.运行以下命令:
gcc -c mylib1.c -o mylib1.o
gcc -shared -fPIC mylib1.o -o libmylib1.so (库的前缀一定是lib,后面跟库的名字,动态库的后缀是.so).
4.将制作好的libmylib1.so 复制到/usr/lib
cp libmylib1.so /usr/lib
其中:-fpic 使输出的对象模块是按照可重定位地址方式生成的。
-shared 指明产生动态链接库。
5.另外编写一个.c文件,如:main1.c
代码如下:
#include <stdio.h>
#include "mylib1.h"
int main()
{
int temp=0;
temp = add(2,8);
printf("the add is %d\n",temp);
return 0;
}
6.使用动态库:
gcc main1.c -lmylib1 -o main1 (在使用库的时候,-l是lib的简写,后面跟着库的名字)
./main1
利用(readelf -d main1)查看main1是否用了自己制作的动态库.
动态库和静态库的区别:
动态库:程序所要用到的库函数代码在链接时全部被copy到程序中.
静态库:程序所要用的库在内存中,程序和库并不在一起,且其他程序共用内存中的这个库。