Programing

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

crosscheck 2020. 6. 1. 07:56
반응형

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, it smells like an error (or at least a potential source of future pain) to be using files from /usr/include when cross-compiling.


gnu/stubs-32.h is not directed included in programms. It's a back-end type header file of gnu/stubs.h, just like gnu/stubs-64.h. You can install the multilib package to add both.


# sudo apt-get install g++-multilib

Should fix this error on 64-bit machines (Debian/Ubuntu).


If you are facing this issue in Mac-OSX terminal with python, try updating the versions of the packages you are using. So, go to your files in python and where you specified the packages, update them to the latest versions available on the internet.

참고URL : https://stackoverflow.com/questions/7412548/error-gnu-stubs-32-h-no-such-file-or-directory-while-compiling-nachos-source

반응형