10 votes

Impossible de trouver les fichiers de bibliothèque indiqués dans le Makefile

J'essaie de compiler cet outil. Voici le début de son Makefile :

CC      = gcc
CFLAGS  = -Wall -O2 -D TRACES
DFLAGS  = -g -Wall -o0
CPPFLAGS= $(INCLUDES:%=-I %)
LDFLAGS = $(LIBRARIES:%=-L %)
LDLIBS  = $(USED_TOOLS:%=-l%)

MY_FILES = 
INCLUDE_DIR     = ~/include

TOOLBOX_INC     = $(INCLUDE_DIR)/tools
TOOLBOX_LIB     = $(TOOLBOX_INC)
USED_TOOLS      = std_io stringutils 
INCLUDES    = $(TOOLBOX_INC)
LIBRARIES   = $(TOOLBOX_LIB)

J'ai aussi ~/include/tools qui, après compilation, inclut std_io.o, libstd_io.a, stringutils.o et libstringutils.a.

J'obtiens l'erreur suivante :

gcc -L ~/include/tools rank.o counterexample.o -lstd_io -lstringutils -o rank
ld: library not found for -lstd_io
collect2: ld returned 1 exit status
make: *** [rank] Error 1

Je ne sais pas si les éléments ne sont pas inclus correctement, et pourquoi il ne trouve pas les fichiers de la bibliothèque.

Edita: Il s'avère que j'ai accidentellement laissé un espace entre les options -L et -I. De plus, les chemins ont dû être développés, je suppose. Ça marche maintenant, merci !

17voto

Jens Points 17702

Le problème est l'utilisation du tilde pour signifier "Répertoire personnel". Un shell ne fera l'expansion du tilde que si le tilde est le premier caractère non cité d'un mot. Les Makefiles ne font jamais d'expansion de tilde. Ainsi, dans

gcc -L~/include ...

la coquille n'est pas effectuer l'expansion du tilde et gcc cherchera un répertoire nommé "~/include" dans le répertoire courant. Mais dans

gcc -L ~/include ...

la coquille fait effectuer l'expansion du tilde et voir gcc

gcc -L /usr/username/include ...

à la place, ce qui fonctionne comme prévu. La bonne chose à faire est de ne jamais utiliser l'expansion du tilde pour le répertoire personnel, mais simplement d'utiliser $HOME de manière appropriée dans le Makefile, par exemple

INCLUDE_DIR     = $$HOME/include

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X