web-dev-qa-db-fra.com

/ usr / bin / ld: impossible de trouver -lc lors de la compilation avec makefile

Contexte d'abord: j'ai un en-tête (event.h), un programme appelé event.c et le programme principal main.c. Ce programme sera compilé, générant d'abord un programme objet (event.o), puis une bibliothèque statique (libevent.a) dans un dossier séparé, puis le programme exécutable work1.exe

Pour ce faire, j'ai créé ce makefile:

work1 : main.c libevent.a
    gcc -static main.c -L./lib -levent -o work1 -Wall

event.o: event.c
gcc -c event.c -Wall

libevent.a: event.o
ar rcs lib/libevento.a event.o 

clean: 
rm work1 *.o

Le résultat de l'exécution du makefile conduit à cette erreur:

 $ make
 gcc -c event.c -Wall
 ar rcs lib/libevent.a event.o 
 gcc -static main.c -L./lib -levent -o work1 -Wall
 /usr/bin/ld: cannot find -lc
 collect2: ld returned 1 exit status
 make: *** [work1] Error 1

Une idée de ce qui se passe ici? Existe-t-il un moyen de compiler cela sans rien installer?

32
SealCuadrado

L'erreur spécifique est la ligne suivante:

/usr/bin/ld: cannot find -lc

L'éditeur de liens ne peut pas trouver les bibliothèques C requises pour lier statiquement votre bibliothèque. Vous pouvez essayer de voir si libc.a existe déjà sur votre système en appelant locate libc.a. Si cela revient, ajoutez un indicateur de bibliothèque approprié pointant vers le répertoire qui inclut libc.a.

Si libc.a n'est pas installé, vous devez malheureusement installer la bibliothèque si vous souhaitez compiler votre bibliothèque statiquement. Puisque vous avez déclaré que vous êtes sur CentOS, vous devriez pouvoir accomplir cela avec yum install glibc-static.

63
hoxworth