2013-04-15 36 views
20

Ngữ cảnh đầu tiên: Tôi có một tiêu đề (event.h), một chương trình gọi là event.c và main.c. Chương trình này sẽ được biên dịch, tạo ra một chương trình đối tượng đầu tiên (event.o), sau đó là một thư viện tĩnh (libevent.a) trong một thư mục riêng biệt, và sau đó chương trình thực thi work1.exe/usr/bin/ld: không thể tìm thấy -lc khi biên dịch với makefile

Để làm điều này, tôi tạo ra tệp makefile này :

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 

kết quả của việc thực hiện các makefile dẫn đến lỗi này:

$ 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 

Bất kỳ ý tưởng những gì đang xảy ra ở đây? Có cách nào để biên dịch này mà không cần cài đặt gì không?

+0

'ar rcs lib/libevento.a event.o' <- typo ở đây hoặc trong makefile thực tế? –

+2

Nó sẽ xuất hiện như thể bạn không có các thư viện c cần thiết cho liên kết tĩnh. Bạn đang biên dịch nền tảng nào? – hoxworth

+0

Trong thời điểm này tôi đang biên dịch với CentOS. Chương trình tương tự đã được thử nghiệm với Ubuntu và nó hoạt động. – SealCuadrado

Trả lời

38

Các lỗi cụ thể là dòng sau:

/usr/bin/ld: cannot find -lc 

Các mối liên kết không thể tìm thấy các thư viện C cần thiết cho liên kết tĩnh thư viện của bạn. Bạn có thể thử xem liệu libc.a đã tồn tại trên hệ thống của bạn chưa bằng cách gọi locate libc.a. Nếu điều này trả về, hãy thêm một lá cờ thư viện thích hợp trỏ đến thư mục bao gồm libc.a.

Nếu libc.a chưa được cài đặt, bạn không may cần cài đặt thư viện nếu bạn muốn biên dịch thư viện tĩnh. Vì bạn đã nói bạn đang ở trên CentOS, bạn sẽ có thể thực hiện điều này với yum install glibc-static.

Các vấn đề liên quan