ข้อผิดพลาด“ gnu / stubs-32.h: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว” ในขณะที่คอมไพล์ซอร์สโค้ด Nachos


170

ฉันกำลังพยายามติดตั้ง Nachos บนแล็ปท็อปของฉันและฉันมี Ubuntu 11.04 บนแล็ปท็อป

รหัสอยู่ใน C และเพื่อสร้างฉันคิดว่าฉันจะต้องรวบรวมข้าม นี่คือที่ปัญหาของฉันคือ ฉันดาวน์โหลดซอร์สโค้ดของ MIPS cross compiler โดยใช้คำสั่ง

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

และฉันคลายซิปโดยใช้

tar zxvf mips-decstation.linux-xgcc.gz      

ไม่เป็นไร แต่เมื่อฉันพยายามสร้างซอร์สโค้ดของ nachos os โดยใช้ make ฉันได้รับข้อผิดพลาดนี้ -

/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และทุกอย่างทำงานได้ดียกเว้นเมื่อฉันพยายามใช้งาน


1
ขอบคุณสำหรับคำแนะนำของคุณตอนนี้โปรแกรมเริ่มการคอมไพล์ แต่ฉันได้รับข้อผิดพลาด _ สวัสดีตอนนี้ฉันมีข้อผิดพลาดนี้ - / usr / bin / ld: ข้ามการเข้ากันไม่ได้ / usr / lib / x86_64-linux-gnu / gcc / x86_64- linux-gnu / 4.5.2 / libstdc ++. a เมื่อค้นหา -lstdc ++ / usr / bin / ld: ไม่พบ -lstdc ++ collect2: ld ส่งคืนสถานะทางออก 1 รายการ: *** [nachos] ข้อผิดพลาด 1 แนวคิดใด ๆ เกี่ยวกับวิธีการแก้ไข นี้ ? ฉันควรทำอย่างไรเกี่ยวกับเรื่องนี้?
Ashish Agarwal

คำตอบ:


352

คุณไม่มีแพ็คเกจ libc dev 32 บิต:

บนอูบุนตูก็เรียกว่า libc6-dev-i386 - sudo apt-get install libc6-dev-i386ทำ ดูคำแนะนำเพิ่มเติมด้านล่างสำหรับ Ubuntu 12.04 ด้านล่าง

บนRed Hat distros ชื่อแพ็กเกจคือglibc-devel.i686(ต้องขอบคุณข้อคิดเห็นของ David Gardner)

บนCentOS 5.8ชื่อแพคเกจคือglibc-devel.i386(ขอบคุณความคิดเห็นของ JimKleck)

บนCentOS 7/6glibc-devel.i686ชื่อแพคเกจ

บนSLESก็เรียกว่า glibc-devel-32bit - zypper in glibc-devel-32bitทำ

ในGentooมันถูกเรียกว่าsys-libs/glibc- do emerge -1a sys-libs/gcc [ source ] (หมายเหตุ: หนึ่งอาจใช้equeryเพื่อยืนยันว่าถูกต้อง; ทำequery belongs belongs /usr/include/gnu/stubs-32.h)

เมื่อวันที่ArchLinuxชื่อแพคเกจเป็น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 ++ ....

บนUbuntu คุณจะต้องทำ 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
คุณสามารถรับsudo apt-get install g++-multilib
ทิโมธีโจนส์

1
สำหรับผู้ที่พบนี้ใน distros Red Hat ตามแพคเกจเป็น glibc-devel.i686 (ผมก็ไม่ได้คำตอบนี้เป็นประโยชน์สำหรับการชี้ผมในทิศทางที่ถูกต้อง :)
เดวิดการ์ดเนอร์

2
มีปัญหาที่ทราบใน Ubuntu 12.04 ซึ่งทำให้ไฟล์นี้อยู่ในไดเรกทอรีที่ไม่ได้มาตรฐานหลังจากการติดตั้ง การแก้ปัญหานี้ทำงานสำหรับฉันในที่สุดgcc.gnu.org/ml/gcc/2012-02/msg00314.html
Eric Chen

55

จากเว็บไซต์ GNU UPC :

คอมไพเลอร์บิลด์ล้มเหลวโดยมีข้อผิดพลาดร้ายแรง: gnu / stubs-32.h: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว

ข้อความแสดงข้อผิดพลาดนี้แสดงขึ้นบนระบบ 64 บิตที่เปิดใช้งานฟีเจอร์ multilib ของ GCC / UPC และบ่งชี้ว่าไม่ได้ติดตั้ง libc เวอร์ชัน 32 บิต มีสองวิธีในการแก้ไขปัญหานี้:

  • ติดตั้ง glibc รุ่น 32 บิต (เช่น glibc-devel.i686 บน Fedora, CentOS, .. )
  • ปิดใช้งานการสร้าง 'multilib' โดยการจัดหาสวิตช์ "--disable-multilib" บนคำสั่งการกำหนดค่าคอมไพเลอร์

8
ขอบคุณสำหรับคำตอบที่มีประโยชน์โดยเฉพาะอย่างยิ่ง: --disable-multilibส่วนหนึ่ง
หมอผี

3
@ djhaskin987, gccupc.org ไม่ใช่แหล่งที่มา gcc.gnu.org คือ
Jonathan Wakely

ฉันทำ 'yum ติดตั้ง glibc-devel.i686' ใน x64 centos 6.4
พฤศจิกายน

1
คุณจะทำสิ่งนี้กับระบบสร้างโดยใช้ autoconf ได้อย่างไร ฉันได้ลองผ่าน - ปิดใช้งาน-multilib แต่มันไม่เปลี่ยนแปลงอะไรเลย ฉันไม่สามารถเข้าถึงรูทเพื่อติดตั้งแพ็คเกจ multilib ได้
user632657

9

sudo apt-get install libc6-devลองทำ

apt-file บอกฉันว่าไฟล์ที่เป็นปัญหานั้นเป็นของแพ็คเกจนั้น


ขอบคุณสำหรับคำตอบของคุณมันช่วยได้มาก: D
Ashish Agarwal

สิ่งนี้ไม่เพียงพอสำหรับเครื่องที่มีหลายระบบเนื่องจากคุณจะยังคงได้รับข้อผิดพลาดนี้แม้ว่าคุณจะติดตั้ง libc6-dev เวอร์ชันล่าสุดแล้วก็ตาม
jeremiah


2

ฉันได้รับข้อผิดพลาดดังต่อไปนี้ในกล่อง fedora 18:


1. /usr/include/gnu/stubs.h:7:27: ข้อผิดพลาดร้ายแรง: gnu / stubs-32.h: ไม่มีการยกเลิกไฟล์หรือการรวบรวมไดเรกทอรีดังกล่าว

ฉันติดตั้ง glibc.i686 และ glibc-devel.i686 แล้วการรวบรวมล้มเหลวโดยมีข้อผิดพลาดดังต่อไปนี้:

2. / usr / bin / ld: การข้าม /usr/lib/gcc/x86_64-redhat-linux/4.7.2/libgcc_s.so ดังนั้นเมื่อค้นหา -lgcc_s / usr / bin / ld: ไม่พบ -lgcc_s collect2: ข้อผิดพลาด : ld ส่งคืนสถานะการออก 1 รายการ

สารละลาย:

ฉันติดตั้ง (yum install) glibc.i686 glibc-devel.i386 และ libgcc.i686 เพื่อกำจัดปัญหาการรวบรวม

ตอนนี้การรวบรวมสำหรับ 32 บิต (-m32) ทำงานได้ดี


1

อืมฉันอยู่ใน Ubuntu 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
ฉันคิดว่าเขากำลังพยายามสร้าง toolchain ไม่ใช่การคอมไพล์ข้ามกับสิ่งเหล่านั้น
Keith Layne

0

gnu/stubs-32.hไม่ได้ถูกรวมอยู่ใน programms มันเป็น back-end ไฟล์ส่วนหัวประเภทเช่นเดียวกับgnu/stubs.h gnu/stubs-64.hคุณสามารถติดตั้งmultilibแพ็คเกจเพื่อเพิ่มทั้งสอง



0

หากคุณประสบปัญหานี้ในเทอร์มินัล Mac-OSX ด้วย python ลองอัปเดตเวอร์ชันของแพ็คเกจที่คุณใช้ ดังนั้นไปที่ไฟล์ของคุณในไพ ธ อนและที่ที่คุณระบุแพ็กเกจอัพเดตให้เป็นเวอร์ชันล่าสุดที่มีอยู่บนอินเทอร์เน็ต


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.