目录
制作动态库
制作静态库
首先准备简单的add.c,sub.c,main.c,head.h.具体代码如下
#head.h文件
int Add(int a, int b);
int Sub(int a, int b);#add.c文件
#include <stdio.h>
int Add(int a, int b)
{return a + b;
}#sub.c文件
#include <stdio.h>
int Sub(int a, int b)
{return a - b;
}#main.c文件
#include "head.h"
#include <stdio.h>int sum()
{int sum = 0;for(int i = 0; i < 20; i++){sum += i;}return sum;
}int main()
{printf("5 + 1 = %d\n", Add(5,1));printf("5 - 1 = %d\n", Sub(5,1));int sums = sum();printf("sum = %d\n", sums);return 0;
}
制作动态库
我们把这些文件夹放在同一文件夹下。

如何我们在家目录即~目录建立lib文件夹,用于存放动态库,在./bashrc文件中添加环境变量,这样编译的动态库才能找到文件。
![]()
vi ~/.bashrc#配置LD_LIBRARY_PATH echo $HOME可查看家目录export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/liu/lib#进行生效
source ~/.bashrc#查看是否生效 如果环境变量中有你添加的变量就是生效成功了
echo $LD_LIBRARY_PATH
转到之前存放编译文件的文件夹
在当前文件夹调用vi makefile对makefile文件进行配置
#vi makefile进行编辑
#动态库的制作
target = libtest2.so
src = $(wildcard *.c)
objects = $(patsubst %.c, %.o, $(src))$(target):$(objects)gcc -shared $^ -o $@mv $@ ~/lib%.o:%.cgcc -c -fpic $<
.PHONY:clean
clean:
#加入-表示该指令错了也会执行下面的指令 -rm -r xxxxxxrm -f $(objects) $(target)
配置好调用make进行编译

这样在家目录lib文件下就有了编译好的libtest2.so动态库
再到调用的地方加入head.h和调用函数main.c,配置makefile
![]()
#vi makefile
target = main
src = $(wildcard *.c)
objects = $(patsubst %.c, %.o, $(src))$(target):$(objects)gcc -o $@ $< -L/home/liu/lib -ltest2.PHONY:clean
clean:
#加入-表示该指令错了也会执行下面的指令 -rm -r xxxxxxrm -f $(objects) $(target)
make执行文件

制作静态库
静态库同样使用前面前面几个文件,直接对makefile文件进行修改。
#vi makefile
#静态库的制作
target = libtest1.a
src = $(wildcard *.c)
objects = $(patsubst %.c, %.o, $(src))$(target):$(objects)ar rcs $@ $^mv $@ ~/lib%.o:%.cgcc -c $<
.PHONY:clean
clean:
#加入-表示该指令错了也会执行下面的指令 -rm -r xxxxxxrm -f $(objects) $(target)# $< 第一个条件 $^所有条件
编好规则后make执行规则

执行后在~/lib就有我们制作的静态库,然后配置需要配置需要使用静态库的makefile
#vi makefile 代码类似动态库 唯一不同的库的名称
target = main
src = $(wildcard *.c)
objects = $(patsubst %.c, %.o, $(src))$(target):$(objects)gcc -o $@ $< -L/home/liu/lib -ltest1.PHONY:clean
clean:
#加入-表示该指令错了也会执行下面的指令 -rm -r xxxxxxrm -f $(objects) $(target)
make对库进行编译。 ./main运行程序

















