2013-04-15 7 views
20

Kontekst pierwszy: Mam nagłówek (event.h), program o nazwie event.c i program główny main.c. Ten program zostanie skompilowany, generując najpierw program obiektowy (event.o), następnie bibliotekę statyczną (libevent.a) w osobnym folderze, a następnie program wykonywalny work1.exe/usr/bin/ld: nie można znaleźć -lc podczas kompilacji z makefile

Aby to zrobić, stworzyłem ten plik 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 

efektem realizacji makefile prowadzi do tego błędu:

$ 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 

Każdy pomysł, co tu się dzieje? Czy istnieje sposób na skompilowanie tego bez instalowania czegokolwiek?

+0

'ar rcs lib/libevento.a event.o' <- literówka tutaj lub w faktycznym pliku makefile? –

+2

Wyglądałoby to tak, jakbyś nie miał bibliotek c wymaganych do łączenia statycznego. Na jakiej platformie to kompilujesz? – hoxworth

+0

W tym momencie kompiluję się z CentOS. Ten sam program był testowany z Ubuntu i działał. – SealCuadrado

Odpowiedz

38

Specyficzny błąd jest następujący wiersz:

/usr/bin/ld: cannot find -lc 

Łącznik nie może znaleźć bibliotek C wymagany dla statycznie łączenie biblioteki. Możesz sprawdzić, czy libc.a już istnieje w Twoim systemie, dzwoniąc pod numer locate libc.a. Jeśli to zwróci, dodaj odpowiednią flagę biblioteki wskazującą katalog zawierający libc.a.

Jeśli nie zainstalowano libc.a, należy niestety zainstalować bibliotekę, jeśli chcesz statycznie skompilować bibliotekę. Ponieważ twierdzisz, że jesteś na CentOS, powinieneś być w stanie to osiągnąć dzięki yum install glibc-static.

Powiązane problemy