打包库到另一个库中(ar命令)

今天遇到一个麻烦,就是如何打包静态库文件到另一个静态库文件中。围观了一下ar文档以及网上blog,得到如下解决方案,直接给上例子代码,研读一会儿就能知道原理了。

例子:

main.c(打印数字的和与差。和函数在一个sum.o(gcc -c sum.c得到)文件中,差函数在libsub.a(gcc -c sub.c||ar -r libsub.a sub.c得到)库中)。

#include<stdio.h>
extern int sum(int i,int j);
extern int sub(int i,int j);
int global = 0;
int main(){
   int i=4; 
   int j=3;
   printf("sum:%d\n",sum(i,j));
   printf("sub:%d\n",sub(i,j));
   printf("global:%d\n",global);
   return 0;
}

int sub(int i,int j){
    return (i-j);
}


sum.c

#include "global.h"
int sum(int i,int j){
    global = 4;
    return (i+j);
}
global.h

extern int global;

CC    =      gcc
AR    =      ar
RM    =      rm
CP    =      cp
ECHO =      echo

INCLUDES = -I./
CFLAGS     += -O2 $(INCLUDES)

include    tool.mak  
TARGET     = libyuerapi.a
LIBS       = libsub.a
OBJS       = sum.o 

all:$(TARGET)

$(TARGET):$(OBJS) $(LIBS)
	$(BUILD_LIBRARY)

%.o:%.c
	$(CC) -c $(CFLAGS) $< -o $@

clean:
	$(RM) *.o $(TARGET)
too.mak

define BUILD_LIBRARY
$(if $(wildcard $@),@$(RM) $@)
$(if $(wildcard ar.mac),@$(RM) ar.mac)
$(if $(filter lib%.a, $^),
@$(ECHO) CREATE $@ > ar.mac
@$(ECHO) SAVE >> ar.mac
@$(ECHO) END >> ar.mac
@$(AR) -M < ar.mac)
$(if $(filter %.o,$^),@$(AR) -q $@ $(filter %.o, $^))
$(if $(filter %.a, $^),
@$(ECHO) OPEN $@ > ar.mac
$(foreach LIB, $(filter lib%.a, $^),
@echo ADDLIB $(LIB) >> ar.mac)
@$(ECHO) SAVE >> ar.mac
@$(ECHO) END >> ar.mac
@$(AR) -M < ar.mac)
endef




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值