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

내 랩톱에 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를 사용할 때를 제외하고는 모든 것이 잘 작동합니다.



답변

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

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


답변

로부터 GNU UPC 웹 사이트 :

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

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

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

답변

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

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


답변

이것은 GCC 위키 FAQ에 있습니다. http://gcc.gnu.org/wiki/FAQ#gnu_stubs-32.h를 참조하십시오.


답변

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) 컴파일이 정상적으로 작동합니다.


답변

흠 잘 우분투 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$

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


답변

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