我有一个目录结构
躯干
- LIB - libParser.a
- OBJ文件
- SRC
- 生成文件
我有以下makefile
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作为最终输出库。
答案 0 :(得分:1)
-llibrary
-l library
...(删除了文字)......
通常这样找到的文件是库文件 - 存档文件 其成员是目标文件。链接器处理归档文件 通过它扫描定义到目前为止的符号的成员 被引用但未定义。但是,如果找到的文件是 普通的目标文件,它以通常的方式链接。唯一的 使用-l选项和指定文件名之间的区别是 -l用'lib'和'.a'包围库并搜索几个 目录。
所以......你可以指定库包含文件夹:
-L./lib
并将libParser.a放在库列表中(减去'lib'和'.a'):
-lParser -lrt -laio ...