2013-06-10 5 views
2

J'ai une structure de répertoireY compris une bibliothèque statique dans makefile

tronc

--lib - libParser.a

--objs

--src

- -Makefile

J'ai le makefile suivant

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 

Je souhaite inclure libParser.a dans la bibliothèque de sortie que je crée, mais je ne suis pas sûr de savoir comment procéder. Pouvez-vous s'il vous plaît me donner les pointeurs afin que je puisse inclure la bibliothèque (libParser.a) et créer cryptolib.a comme une bibliothèque de sortie finale.

+0

Voulez-vous une règle qui peut construire 'libParser.a', ou voulez-vous simplement supposer qu'elle existe? Et savez-vous comment construire 'cryptolib.a' comme vous le souhaitez sur la ligne de commande? – Beta

+0

Je vais supposer qu'il se termine donc je ne veux pas le construire. Oui, je peux créer cryptolib.a mais je veux lier libParser.a avec cryptolib. J'ai mis une nouvelle ligne ici LIBS = -l./lib/libParser.a -lrt -laio -lrt -lpthread -lm -lpq -ldl, j'ai pu lier la librairie après avoir mis cette ligne. Pouvez-vous suggérer s'il y a d'autres moyens pour la même chose? – Rohit

Répondre

1

de gcc online docs:

-llibrary

bibliothèque -l

... (texte supprimé) ...

Normalement, les fichiers trouvés de cette façon sont des fichiers de bibliothèque: fichiers d'archives dont les membres sont des fichiers objets. L'éditeur de liens gère un fichier d'archives par en le parcourant pour les membres qui définissent des symboles qui ont été référencés mais non définis jusqu'à présent . Mais si le fichier trouvé est un fichier objet ordinaire , il est lié de la manière habituelle. La seule différence entre l'utilisation d'une option -l et la spécification d'un nom de fichier est qui -l entoure la bibliothèque avec 'lib' et '.a' et recherche plusieurs répertoires .

Alors ... vous pouvez spécifier la bibliothèque comprennent le dossier:

-L./lib 

et mettre la libParser.a dans la liste des bibliothèques (subracting 'lib' et '.a'):

-lParser -lrt -laio ... 
Questions connexes