ar 命令简介

ar命令可以用来创建、修改库,也可以从库中提出单个模块。常用命令主要是打 包、解包和列包内容:

打包可用如下命令:


ar cq libxxx.a xxx.o

解包可用如下命令:


ar x libxxx.a

列举包内容可用命令:


ar t libxxx.a

例解生成静态库

库文件 foo.c 和 fun.c


/*foo.c */
#include <stdio.h>

void fun1 ()
{
    printf ("I am fun1. \n");
}

void fun2 ()
{
    printf ("I am fun2. \n");
}


/* fun.c */
#include <stdio.h>

void fun3 ()
{
    printf ("I am fun3.\n");
}

void fun4 ()
{
    printf ("I am fun4. \n");
}

主函数 main.c


#include "foo.h"

int main()
{
    fun1 ();
    fun2 ();
    fun3 ();
}

Makefile

CC = gcc
AR = ar

COBJS = fun foo

TARGET_LIB = libf.a
TARGET_TEST = main

TEST_SRC = main.c
TEST_OBJ = main.o

TMPFILE = objlist

all:$(TARGET_LIB) $(TARGET_TEST)

$(TARGET_LIB):DecompressAr
    $(AR) cq $@ $(shell cat $(TMPFILE))

DecompressAr:
    $(foreach n,$(COBJS),$(AR) t lib$(shell basename $(n)).a >> $(TMPFILE);)
    $(foreach n,$(COBJS),$(AR) x lib$(shell basename $(n)).a;)

$(TEST_OBJ):$(TEST_SRC)
    $(CC) -c $(TEST_SRC)

$(TARGET_TEST):$(TARGET_LIB) $(TEST_OBJ)
    $(CC) -o $(TARGET_TEST) $(TEST_OBJ) $(TARGET_LIB)

clean:
    rm -f *.o $(TARGET_TEST) $(TMPFILE) $(TARGET_LIB)

SeeAlso

foot bar