/ usr / bin / ld: imansible trovare -lc durante la compilazione con makefile

Contesto prima: ho un’intestazione (event.h), un programma chiamato event.c e il programma principale main.c. Questo programma verrà compilato, generando prima un programma object (event.o), quindi una libreria statica (libevent.a) in una cartella separata e quindi il programma eseguibile work1.exe

Per fare questo ho creato questo 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 

Il risultato dell’esecuzione del makefile porta a questo errore:

  $ 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 

Qualche idea su cosa sta succedendo qui? C’è un modo per compilarlo senza installare nulla?

L’errore specifico è la seguente riga:

 /usr/bin/ld: cannot find -lc 

Il linker non è in grado di trovare le librerie C necessarie per il collegamento statico della libreria. Puoi provare a vedere se libc.a esiste già sul tuo sistema chiamando locate libc.a Se questo ritorna, aggiungi un flag di libreria appropriato che punta alla directory che include libc.a

Se libc.a non è installato, è purtroppo necessario installare la libreria se si desidera compilare la libreria in modo statico. Dato che hai dichiarato di essere su CentOS, dovresti riuscire a farlo con yum install glibc-static .