目录
首先准备简单的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:%.c
gcc -c -fpic $<
.PHONY:clean
clean:
#加入-表示该指令错了也会执行下面的指令 -rm -r xxxxxx
rm -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 xxxxxx
rm -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:%.c
gcc -c $<
.PHONY:clean
clean:
#加入-表示该指令错了也会执行下面的指令 -rm -r xxxxxx
rm -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 xxxxxx
rm -f $(objects) $(target)
make对库进行编译。 ./main运行程序