歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux技術

linux下靜動態庫Makefile的編寫和應用

前言

在linux下做項目,難免會有對庫的封裝,需要把自己編寫的程序編譯成靜動態庫給其他人提供接口,這時候最重要的就是Makefile的編寫。

一、動態庫Makefile的編寫和使用

[b]1、動態鏈接[/b]連接器在鏈接時僅僅建立與所需庫函數的之間的鏈接關系,在程序運行時才將所需資源調入可執行程序,也就是你在執行應用程序的時候一定要把你編譯後的.so配置到你執行程序環境下,直接拷貝到/lib/目錄下也是可以的。

[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

二、靜態庫Makefile的編寫和使用

[b]1、靜態鏈接[/b]由鏈接器在鏈接時將庫的內容加入到可執行程序中,運行執行程序的時候直接就可以運行,但鏈接出的應用程序比較大。

[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指定使用靜態庫

Copyright © Linux教程網 All Rights Reserved