linux下静动态库Makefile的编写和应用


前言


在linux下做项目,难免会有对库的封装,需要把自己编写的程序编译成静动态库给其他人提供接口,这时候最重要的就是Makefile的编写。


一、动态库Makefile的编写和使用


1、动态链接


连接器在链接时仅仅建立与所需库函数的之间的链接关系,在程序运行时才将所需资源调入可执行程序,也就是你在执行应用程序的时候一定要把你编译后的.so配置到你执行程序环境下,直接拷贝到/lib/目录下也是可以的。


2、动态库Makefile的编写


CC=gcc//gcc 编译器,如果要在ARM上应用就需要交叉编译器
CCFLAGS= -g -Wall
SRC:= $(wildcard  *.c ) //当前文件夹下所有.c文件,如果还有其他.c文件,也放到括号里面  
OBJS:=$(patsubst %.c,%.o,$(SRC)) //.c文件链接成的.o文件
INCLDPATH=-I. //所需要的头文件目录   
LIB_OBJECT = ./libyuvtorgb.so//动态库所在目录和名字
.PHONY:all
all:$(LIB_OBJECT)
$(LIB_OBJECT):$(OBJS)    
$(CC) -shared -o $(LIB_OBJECT) $(OBJS)
%.o : %.c  
$(CC) -fPIC  -c $(CCFLAGS) $(INCLDPATH) -o $@ $<
clean:
rm  -rf  $(LIB_OBJECT) $(OBJS)


3、动态库的使用


1)库函数、头文件均在当前目录下
 # gcc -o my_test mytest.c libtestlib.so
2)库函数、头文件假设在/opt目录
 # gcc - - o mytest mytest.c -L/opt  -lltestlib -I/opt


二、静态库Makefile的编写和使用


1、静态链接


      由链接器在链接时将库的内容加入到可执行程序中,运行执行程序的时候直接就可以运行,但链接出的应用程序比较大。


2、静态库Makefile的编写


CC=gcc                  //gcc 编译器,如果要在ARM上应用就需要交叉编译器。
CCFLAGS= -g -Wall
SRC:= $(wildcard  *.c ) //当前文件夹下所有.c文件,如果还有其他.c文件,也放到括号里面  
OBJS:=$(patsubst %.c,%.o,$(SRC)) //.c文件链接成的.o文件
INCLDPATH=-I.                //所需要的头文件目录
AR:=ar rc    //RC链接成静态库 
LIB_OBJECT = ./libyuvtorgb.a //静态库所在目录和名字

.PHONY:all
all:$(LIB_OBJECT)
$(LIB_OBJECT):$(OBJS)    
$(AR)   $(LIB_OBJECT) $(OBJS)  
%.o : %.c  
$(CC)  -c $(CCFLAGS) $(INCLDPATH) -o $@ $<
clean:
rm  -rf  $(LIB_OBJECT) $(OBJS)

 

3、动态库的使用


1)库函数、头文件均在当前目录下
# gcc -o my_test mytest.c libtestlib.a
2)库函数、头文件假设在/opt目录
# gcc - - o mytest mytest.c -L/opt  -lltestlib -I/opt


注意:当静态库与动态库重名时,系统会优先连接动态库,或者我们可以加入-static指定使用静态库

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ProYuan28

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值