Nachos 소스 코드를 컴파일하는 동안 오류 "gnu / stubs-32.h : 해당 파일 또는 디렉토리가 없습니다"


170

내 랩톱에 Nachos를 설치하려고하는데 랩톱에 Ubuntu 11.04가 있습니다.

코드는 C로되어 있으므로 빌드하려면 크로스 컴파일러가 필요하다고 가정합니다. 여기가 내 문제입니다. 명령을 사용하여 MIPS 크로스 컴파일러의 소스 코드를 다운로드했습니다.

  wget http://mll.csie.ntu.edu.tw/course/os_f08/assignment/mips-decstation.linux-xgcc.gz

그리고 나는 그것을 사용하여 압축을 푼다.

tar zxvf mips-decstation.linux-xgcc.gz      

괜찮습니다.하지만 make를 사용하여 nachos os의 소스 코드를 빌드하려고하면이 오류가 발생합니다.

/usr/include/gnu/stubs.h:7:27: fatal error: gnu/stubs-32.h: No such file or directory compilation terminated. make: *** [bitmap.o] Error 1

나는 여기에 주어진 지침을 따르려고 노력하고 있습니다 -http : //mll.csie.ntu.edu.tw/course/os_f08/217.htm 그리고 make를 사용할 때를 제외하고는 모든 것이 잘 작동합니다.


1
제안 해 주셔서 감사합니다. 프로그램이 컴파일되기 시작하지만이 오류가 발생합니다. _ 안녕, 이제이 오류가 있습니다-/ usr / bin / ld : 호환되지 않는 / usr / lib / x86_64-linux-gnu / gcc / x86_64- -lstdc ++ / usr / bin / ld를 검색 할 때 linux-gnu / 4.5.2 / libstdc ++. a : -lstdc ++ collect2를 찾을 수 없음 : ld가 1 개의 종료 상태를 리턴했습니다. *** [nachos] 오류 1 수정 방법에 대한 아이디어 이 ? 이것에 대해 어떻게해야합니까?
Ashish Agarwal

답변:


352

32 비트 libc dev 패키지가 없습니다 :

우분투 그것은으로 libc6-DEV-I386라고 - 할 sudo apt-get install libc6-dev-i386. Ubuntu 12.04에 대한 추가 지침은 아래를 참조하십시오.

레드햇 배포판의 패키지 이름입니다 glibc-devel.i686(데이비드 가드너의 의견에 감사합니다).

CentOS는 5.8 , 패키지 이름입니다 glibc-devel.i386(JimKleck의 의견에 감사합니다).

/ 7에 CentOS 6 , 패키지 이름입니다 glibc-devel.i686.

SLES 는 glibc에-(STABLE) - 32 비트를 불렀다 - 할 zypper in glibc-devel-32bit.

젠투 이 호출 sys-libs/glibc- 할 emerge -1a sys-libs/gcc [ 소스 ] (참고 : 하나는 사용할 수 있습니다 equery이 정확한지 확인하기 위해, 할 equery belongs belongs /usr/include/gnu/stubs-32.h)

아치 리눅스 패키지 이름입니다 lib32-glibc- 할 pacman -S lib32-glibc.


Ubuntu 12.04 를 사용하고 있습니까? 이 알려진 문제는 비 표준 위치에두고 파일을 . 당신은 것 또한 수행해야합니다

export LIBRARY_PATH=/usr/lib/$(gcc -print-multiarch)
export C_INCLUDE_PATH=/usr/include/$(gcc -print-multiarch)
export CPLUS_INCLUDE_PATH=/usr/include/$(gcc -print-multiarch)

빌드하기 전에 (예 : .bashrc).


C ++ 코드도 컴파일하는 경우 32 비트 stdc ++ 라이브러리도 필요합니다. 이 경고가 표시되면

.... / usr / bin / ld : -lstdc ++를 찾을 수 없습니다 ....

우분투 당신이 할 필요가있을 것이다 sudo apt-get install g++-multilib

CentOS는 5 당신이 할 필요가있을 것이다yum install libstdc++-devel.i386

CentOS는 6 당신이 할 필요가있을 것이다yum install libstdc++-devel.i686

다른 시스템 용 패키지에서 자유롭게 편집하십시오.


2
어쩌면 내가 그 패키지를 찾지 못한 이유는 내 노트북이 32 비트이기 때문입니다 ... 그러나 나는 찾았습니다 libc-dev-amd64. 내 잘못이야.
Keith Layne

1
네, 아마 그는 64 비트 머신에 있다고 말하고 싶기 때문에 파일이 누락되었습니다. 내 64 비트 시스템에서 stubs.h (그가 가지고있는)는 libc6-dev에 있고 stubs-32.h (그가 가지고 있지 않은)는 libc6-dev-i386에 있습니다. APT-파일에 대한 좋은 팁 - 나는 :) 그것에 대해 알지 못했다
티모시 존스

8
당신은 함께 해당 라이브러리의 32 비트 버전을 선택할 수 있습니다sudo apt-get install g++-multilib
티모시 존스

1
Red Hat 기반 배포판에서이 문제를 겪는 사람들을 위해 패키지는 glibc-devel.i686입니다 (방금 전이 답변은 올바른 방향으로 나를 안내하는 데 도움이되었습니다)
David Gardner

2
Ubuntu 12.04에는 설치 후이 파일을 비표준 디렉토리에 저장하는 알려진 문제가 있습니다. 이 솔루션은 최종적으로 gcc.gnu.org/ml/gcc/2012-02/msg00314.html에서 효과적이었습니다 .
Eric Chen

55

로부터 GNU UPC 웹 사이트 :

컴파일러 빌드가 치명적인 오류로 실패 함 : gnu / stubs-32.h : 해당 파일 또는 디렉토리가 없음

이 오류 메시지는 GCC / UPC multilib 기능이 활성화 된 64 비트 시스템에 나타나며 32 비트 버전의 libc가 설치되지 않았 음을 나타냅니다. 이 문제를 해결하는 방법에는 두 가지가 있습니다.

  • 32 비트 버전의 glibc 설치 (예 : Fedora, CentOS, ..에서 glibc-devel.i686)
  • 컴파일러 구성 명령에 "--disable-multilib"스위치를 제공하여 'multilib'빌드를 비활성화하십시오.

8
특히 유용한 답변에 감사드립니다 : --disable-multilib부분
necromancer

3
@ djhaskin987, gccupc.org는 소스가 아니며 gcc.gnu.org는
Jonathan Wakely

나는 64 개에 CentOS 6.4에 '냠의 glibc-devel.i686 설치'않았다
plhn

1
autoconf 기반 make 시스템을 사용하여이 작업을 어떻게 수행합니까? --disable-multilib를 전달하려고 시도했지만 아무것도 변경되지 않습니다. multilib 패키지를 설치하기위한 루트 액세스 권한이 없습니다.
user632657

9

을 시도하십시오 sudo apt-get install libc6-dev.

apt-file 해당 파일이 해당 패키지에 속해 있음을 알려줍니다.


D : 귀하의 답변을 주셔서 감사합니다, 그것은 많은 도움이
인 Ashish 아가 왈

최신 버전의 libc6-dev가 설치되어 있어도이 오류가 계속 발생하므로 멀티 아치 머신에서는 충분하지 않습니다.
예레미야


2

fedora 18 상자에서 다음과 같은 오류가 발생했습니다.


1. /usr/include/gnu/stubs.h:7:27 : 치명적인 오류 : gnu / stubs-32.h : 해당 파일 또는 디렉토리 컴파일이 종료되지 않았습니다.

glibc.i686 및 glibc-devel.i686을 설치 한 후 다음 오류로 컴파일에 실패했습니다.

2. / usr / bin / ld : -lgcc_s / usr / bin / ld를 검색 할 때 호환되지 않는 /usr/lib/gcc/x86_64-redhat-linux/4.7.2/libgcc_s.so를 건너 뛰기 : -lgcc_s collect2를 찾을 수 없음 : 오류 : ld가 1 개의 종료 상태를 리턴했습니다.

해결책:

컴파일 문제를 없애기 위해 glibc.i686 glibc-devel.i386 및 libgcc.i686을 설치했습니다 (yum install).

이제 32 비트 (-m32) 컴파일이 정상적으로 작동합니다.


1

흠 잘 우분투 12.04에 있고 gcc 4.7.2를 컴파일하려고 할 때 이와 동일한 오류가 발생합니다.

libc6-dev-i386패키지 설치를 시도 하고 다음을 얻었습니다.

Package libc6-dev-i386 is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package 'libc6-dev-i386' has no installation candidate

또한 bash에서 올바른 환경 변수를 설정했습니다.

export LIBRARY_PATH=/usr/lib/$(gcc -print-multiarch)
export C_INCLUDE_PATH=/usr/include/$(gcc -print-multiarch)
export CPLUS_INCLUDE_PATH=/usr/include/$(gcc -print-multiarch)

그러나, 나는 여전히 오류를 stubs-32.h겪고 있었고 gcc가 빠른 diff를 한 후에 그것을 찾을 것으로 예상되는 위치로 간단히 복사 했습니다.

vic@ubuntu:/usr/include/i386-linux-gnu/gnu$ diff ../../gnu ./
Only in ./: stubs-32.h
Only in ../../gnu: stubs-64.h
vic@ubuntu:/usr/include/i386-linux-gnu/gnu$ sudo cp stubs-32.h ../../gnu/
[sudo] password for vic: 
vic@ubuntu:/usr/include/i386-linux-gnu/gnu$ diff ../../gnu ./
Only in ../../gnu: stubs-64.h
vic@ubuntu:/usr/include/i386-linux-gnu/gnu$

지금 컴파일 중입니다. 더 많은 불평이 있는지 봅시다 ...


이상한. 이 패키지는 12.04 (정확한)로 제공됩니다. packages.ubuntu.com/precise/libc6-dev-i386
Timothy Jones

0

FWIW, 크로스 컴파일 할 때 / usr / include의 파일을 사용하는 것은 오류 (또는 적어도 미래의 고통의 근원) 냄새가납니다.


1
나는 그가 툴체인을 빌드하려고 노력하고 있다고 생각합니다.
Keith Layne

0

gnu/stubs-32.h프로그램에 포함되지 않습니다. gnu/stubs.h같은 백엔드 유형 헤더 파일입니다 gnu/stubs-64.h. multilib패키지를 설치하여 둘 다 추가 할 수 있습니다 .


0

# sudo apt-get 설치 g ++-multilib

64 비트 컴퓨터 (Debian / Ubuntu)에서이 오류를 수정해야합니다.


0

파이썬이있는 Mac-OSX 터미널에서이 문제가 발생하면 사용중인 패키지 버전을 업데이트하십시오. 따라서 파이썬의 파일로 이동하여 패키지를 지정한 위치에서 인터넷에서 사용 가능한 최신 버전으로 업데이트하십시오.


0

데비안 / 우분투에서 :

sudo apt-get install g++-multilib libc6-dev-i386

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