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?
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
.