업그레이드 후 gcc가 더 이상 작동하지 않습니다


8

예로서:

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.

오류 메시지를 수정하려고 시도한 후 어딘가에 추측합니다.

/ usr / bin / ld : crt1.o를 찾을 수 없습니다 : 해당 파일이나 디렉토리가 없습니다.

나는 일을 완전히 망쳐 놓았습니다. 누구든지 조언 해 주시겠습니까?


libc-dev가 이미 설치되어 있습니까? 그것은 나를 위해 잘 컴파일됩니다.
itnet7

답변:


10

gcc-multilib64 비트 운영 체제에 32 비트 특정 헤더를 제공하는 패키지 를 설치해야 합니다.


0

이것은 새로운 oneiric 설치에서 나에게 잘 작동합니다. /usr/include/x86_64-linux-gnu/bits/predefs.hlibc6-dev 패키지에 의해 제공 될 수 있습니다.

다음을 사용하여 해당 패키지를 "재설치"할 수 있습니다.

sudo apt-get install --reinstall libc6-dev

그러나 해당 파일이 있으면 컴파일러의 검색 경로가 해당 파일의 올바른 위치를 찾지 못하는 것처럼 보입니다. 다음을 실행하여 확인할 수 있습니다.

gcc --verbose -o hello hello.c

포함 파일의 검색 경로를 인쇄해야합니다. 내 말 :

    #include <...> 검색이 시작됩니다 :
     /usr/lib/gcc/x86_64-linux-gnu/4.6.1/include
     / usr / local / include
     /usr/lib/gcc/x86_64-linux-gnu/4.6.1/include-fixed
     / usr / include / x86_64-linux-gnu
     / usr / include

동일하지 않으면 빌드 필수 패키지 중 일부에 버전이 일치하지 않는다고 말하고 싶습니다. 올바른 버전의 gcc 및 libc6-dev 패키지가 있는지 확인하십시오. 지금은 oneiric에서 다음과 같아야합니다.

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

--verbose 시도의 결과는 다음과 같습니다.
hsmyers

답변에 어떻게 대답합니까? 최소한 내 GCC 버전은 실험용으로 4.7.0으로 표시됩니다. 어떻게 설치되었는지 모르겠습니다. 내가 알 수있는 한 libc6-dev가 설치되었습니다. 내 포함 경로는 표준 / usr / local / include와 함께 /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.0/include(/include-fixed)와 비슷합니다. 디렉토리 또는 비트 / predefs.h에서 비트를 찾을 수 없습니다. 다시 설치를 시도하고 어떻게되는지 보겠습니다.
hsmyers

재설치는 아무런 차이가 없었습니다. / usr / include / i386-linux-gnu / bits에서 발견 된 비트는 GCC 포함 경로의 일부로 표시되지 않습니다. 내 libc6-dev 버전은 귀하의 버전과 일치합니다.
hsmyers

gcc의 실험적 (우분투 표준이 아닌) 버전이 문제라고 제안합니다. 아카이브에서 제거하고 4.6.1을 설치하는 것이 좋습니다.
Jeremy Kerr

내가 생각하고 있었던 것 – a) 그것이 어떻게 도착했는지, b) 그것을 제거하는 방법을 모르는 작은 문제는 제외. apt-get은 gcc 작업을 제거합니까? 아니면 완전한 패키지 이름이 필요합니까? 아마도 i686-pc-linux-gnu-4.7.0?
hsmyers

0

내 avr-gcc 컴파일러와 동일한 문제가있었습니다.

/ usr / include / i386-linux-gnu /의 파일과 폴더를 avr-gcc가 -files를 검색하는 폴더에 연결했습니다. 예를 들면 다음과 같습니다. / usr / lib / avr / include /

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

어쩌면 gcc와 비슷한 작품 일 수도 있습니다. 에

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.