2

我有一个目录结构

树干

--lib--libParser.a

--对象

--src

--生成文件

我有以下生成文件

CRYPTOLIB_TARGET = cryptolib.a 

LOCALLIBS = ./objs
LOCALLIBS_IMAGE = ./cryptolib.a
CC = gcc
AR = ar
DEBUG_FLAGS = 
LDEFSECOM_LOG_VERSION = -DSECOM_LOG_VERSION
CMPL_TIME_MACROS = -DENBL_DEBUG_PRINTF $(LDEFSECOM_LOG_VERSION)
ALLWARN = 
ALL_INCS = -I./src/INCLUDE
LIBS = -lrt -laio -lrt -lpthread -lm -lpq -ldl

LINK = $(CC) $(DEBUG_FLAGS) $(CMPL_TIME_MACROS) $(ALLWARN) $(ALL_INCS) $(LIBS) -c

default = CRYPTOLIB_TARGET

CRYPTOLIB_OBJ =             \
$(LOCALLIBS)/AES_crypt.o    \
$(LOCALLIBS)/bigdigits.o    \
$(LOCALLIBS)/DataEncryption.o   \
$(LOCALLIBS)/SiaEncryption.o

$(CRYPTOLIB_TARGET): $(CRYPTOLIB_OBJ)
$(AR) r $(CRYPTOLIB_TARGET) $(CRYPTOLIB_OBJ)

$(LOCALLIBS)/AES_crypt.o : \
src/AES_crypt.c
mkdir -p ./objs
$(LINK) src/AES_crypt.c -o $(LOCALLIBS)/AES_crypt.o

$(LOCALLIBS)/bigdigits.o : \
src/bigdigits.c
$(LINK) src/bigdigits.c -o $(LOCALLIBS)/bigdigits.o

$(LOCALLIBS)/DataEncryption.o : \
src/DataEncryption.c
$(LINK) src/DataEncryption.c -o $(LOCALLIBS)/DataEncryption.o

$(LOCALLIBS)/SiaEncryption.o : \
src/SiaEncryption.c
$(LINK) src/SiaEncryption.c -o $(LOCALLIBS)/SiaEncryption.o

clean:
rm -rf objs
rm -rf cryptolib.a

我想将 libParser.a 包含在我正在创建的输出库中,但我不知道该怎么做。您能否给我一些指示,以便我可以包含库(libParser.a)并创建 cryptolib.a 作为最终输出库。

4

1 回答 1

1

来自gcc 在线文档

-图书馆

-l 库

...(已删除文本)...

通常以这种方式找到的文件是库文件——其成员是目标文件的归档文件。链接器通过扫描归档文件来处理归档文件,其中的成员定义了迄今为止已被引用但尚未定义的符号。但是如果找到的文件是一个普通的目标文件,它会以通常的方式链接。使用 -l 选项和指定文件名的唯一区别是 -l 用“lib”和“.a”包围库并搜索多个目录。

所以...您可以指定库包含文件夹:

-L./lib

并将 libParser.a 放入库列表中(减去“lib”和“.a”):

-lParser -lrt -laio ...
于 2013-07-20T03:37:11.810 回答