gcc không còn hoạt động sau khi nâng cấp


8

Ví dụ:

hsmyers@ubuntu:~/c_dev$ cat hello.c
#include <stdio.h>

int main(int argc,char **argv) {
printf("Hello World!\n");
return 0;
}
hsmyers@ubuntu:~/c_dev$ gcc -c -o hello.o hello.c
In file included from /usr/include/stdio.h:28:0,
             from hello.c:1:
/usr/include/features.h:323:26: fatal error: bits/predefs.h: No such file or directory
compilation terminated.

Tại một nơi nào đó trên đường đi sau khi cố gắng sửa thông báo lỗi:

/ usr / bin / ld: không thể tìm thấy crt1.o: Không có tệp hoặc thư mục như vậy

Tôi đã hoàn thành mọi thứ. Ai có thể vui lòng tư vấn?


Bạn đã cài đặt libc-dev chưa? Nó biên dịch tốt cho tôi.
itnet7

Câu trả lời:


10

Bạn cần cài đặt gcc-multilibgói mang tiêu đề cụ thể 32 bit vào hệ điều hành 64 bit của bạn.


0

Điều này hoạt động tốt cho tôi, trên một cài đặt một chiều mới. /usr/include/x86_64-linux-gnu/bits/predefs.hđược cung cấp bởi gói libc6-dev, có lẽ điều đó không được cài đặt đúng?

Bạn có thể "cài đặt lại" gói đó với:

sudo apt-get install --reinstall libc6-dev

Tuy nhiên, nếu tệp đó có mặt, thì có vẻ như đường dẫn tìm kiếm của trình biên dịch của bạn không tìm đúng nơi cho tệp đó. Bạn có thể kiểm tra bằng cách chạy như sau:

gcc --verbose -o hello hello.c

mà nên in đường dẫn tìm kiếm cho các tập tin bao gồm. Của tôi nói:

    #include <...> tìm kiếm bắt đầu tại đây:
     /usr/lib/gcc/x86_64-linux-gnu/4.6.1/include
     / usr / địa phương / bao gồm
     /usr/lib/gcc/x86_64-linux-gnu/4.6.1/include-fixed
     / usr / bao gồm / x86_64-linux-gnu
     / usr / bao gồm

Nếu điều đó không giống nhau, tôi sẽ nói có một phiên bản không khớp giữa một số gói thiết yếu của bạn. Kiểm tra xem bạn có đúng phiên bản của gói gcc và libc6-dev không. Ngay bây giờ trên một hướng, những điều này nên là:

gcc           4:4.6.1-2ubuntu5
libc6-dev     2.13-20ubuntu5 

kết quả của nỗ lực --verbose là:
hsmyer

Làm thế nào để tôi trả lời một câu trả lời? Tối thiểu, phiên bản GCC của tôi là 4.7.0 được liệt kê dưới dạng thử nghiệm. Tôi không biết làm thế nào nó được cài đặt. Theo như tôi có thể nói, libc6-dev đã được cài đặt. Các đường dẫn bao gồm của tôi tương tự như: /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.0/include (cũng / bao gồm-cố định) với tiêu chuẩn / usr / local / bao gồm cả. Tôi không thể tìm thấy một trong hai bit như một thư mục hoặc bit / preefs.h trong đó. Tôi sẽ thử cài đặt lại và xem những gì sẽ xảy ra.
hsmyer

Cài đặt lại không có sự khác biệt. Các bit được tìm thấy tại / usr / include / i386-linux-gnu / bits, không được hiển thị như một phần của GCC bao gồm các đường dẫn. Phiên bản libc6-dev của tôi phù hợp với bạn.
hsmyer

Tôi muốn đề xuất rằng phiên bản gcc thử nghiệm (và không phải tiêu chuẩn Ubuntu) là vấn đề của bạn. Tôi khuyên bạn nên xóa cái đó và cài đặt 4.6.1 khỏi kho lưu trữ.
Jeremy Kerr

Gần như những gì tôi đã nghĩ --- ngoại trừ vấn đề nhỏ là không biết a) làm thế nào nó đến đó và b) làm thế nào để loại bỏ nó. Một apt-get loại bỏ gcc làm việc? Hoặc tôi sẽ cần tên gói đầy đủ? Có lẽ i686-pc-linux-gnu-4.7.0?
hsmyer

0

Tôi đã có cùng một vấn đề với trình biên dịch avr-gcc của tôi.

Tôi đã liên kết các tệp và thư mục trong / usr / include / i386-linux-gnu / với một thư mục trong đó avr-gcc tìm kiếm -files. Ví dụ: / usr / lib / avr / include /

ln -s /usr/include/i386-linux-gnu/* /usr/lib/avr/include/

Có lẽ một cái gì đó tương tự làm việc cho gcc. Đến

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.