Linux系统编程makefile制作动态库和静态库

目录

制作动态库

 制作静态库

首先准备简单的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运行程序

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值