Voici mon Makefile:Comment résoudre ce problème de liaison dans Makefile?
DIR=..
ARG=$(QUERY_STRING)
MAIN=main
SRC_DIR=$(DIR)/src
BIN_DIR=$(DIR)/bin
INC_DIR=$(DIR)/inc
LIB_DIR=$(DIR)/lib
LIBS=markdown
all: $(MAIN) exec
$(MAIN): $(MAIN).o
$(LD) $^ -L $(LIB_DIR) -l $(LIBS) -o $(BIN_DIR)/[email protected]
$(MAIN).o: $(SRC_DIR)/$(MAIN).c
$(CC) $^ -I $(INC_DIR) -o [email protected]
exec:
$(BIN_DIR)/$(MAIN) $(ARG)
clean:
rm -f *.o core.* $(BIN)/$(MAIN)
Il est clairement défini comment je mon projet est organisé, donc ne l'expliquer. Il ne compile sans aucun problème, mais sur l'exécution binaire $(BIN_DIR)/$(MAIN)
l'erreur suivante apparaît:
../bin/main: error while loading shared libraries: rintf: cannot open shared object file: No such file or directory
make: *** [exec] Error 127
Qu'est-ce que la bibliothèque ne rintf
appartiennent? J'ai essayé de lier aussi -lc
, mais cela ne résout pas le problème.
Y at-il un problème avec mon Makefile
? Ou devrais-je lier quelque chose supplémentaire à $(MAIN)
?
Merci d'avance pour vos réponses.
+1. De plus, la règle 'all: $ (MAIN) exec' est imprudente; Make ne promet pas de construire les prérequis d'une cible dans l'ordre de gauche à droite. Mieux: 'all: exec' et' exec: $ (MAIN) '. – Beta
@Beta: oui, vous avez raison. Personnellement, je n'aime pas particulièrement les fichiers makefile qui exécutent automatiquement les programmes qui ont été construits, mais cela pourrait être une vieille pensée brouillée. Cela dépend, en partie, de ce que l'exécution fait, je suppose; Un test unitaire ou un test de régression est logique - et c'est probablement ce qui se passe ici. Et j'ai beaucoup de contre-exemples du travail effectué au bureau. –