前言
在linux下做項目,難免會有對庫的封裝,需要把自己編寫的程序編譯成靜動態庫給其他人提供接口,這時候最重要的就是Makefile的編寫。
[b]2、動態庫Makefile的編寫[/b]CC=gcc -pthread //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)
[b]3、動態庫的使用[/b]1)庫函數、頭文件均在當前目錄下
# gcc -o my_test mytest.c libtestlib.so
2)庫函數、頭文件假設在/opt目錄
# gcc - - o mytest mytest.c -L/opt -lltestlib -I/opt
[b]2、靜態庫Makefile的編寫[/b]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)
[b]3、動態庫的使用[/b]1)庫函數、頭文件均在當前目錄下
# gcc -o my_test mytest.c libtestlib.a
2)庫函數、頭文件假設在/opt目錄
# gcc - - o mytest mytest.c -L/opt -lltestlib -I/opt
注意:當靜態庫與動態庫重名時,系統會優先連接動態庫,或者我們可以加入-static指定使用靜態庫