Kesalahan "gnu / stubs-32.h: Tidak ada file atau direktori" saat mengompilasi kode sumber Nachos


170

Saya mencoba menginstal Nachos di laptop saya dan Ubuntu 11,04 di laptop.

Kode dalam C dan untuk membangunnya saya berasumsi saya akan memerlukan kompiler silang. Di sinilah masalah saya. Saya mengunduh kode sumber MIPS compiler lintas menggunakan perintah

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

dan saya membuka ritsletingnya menggunakan

tar zxvf mips-decstation.linux-xgcc.gz      

Ini tidak apa-apa, tetapi ketika saya mencoba untuk membangun kode sumber dari nachos os, menggunakan make, saya mendapatkan kesalahan ini -

/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

Saya mencoba mengikuti instruksi yang diberikan di sini - http://mll.csie.ntu.edu.tw/course/os_f08/217.htm dan semuanya bekerja dengan baik kecuali ketika saya mencoba menggunakan make.


1
Terima kasih atas saran Anda, program sekarang mulai mengkompilasi tetapi saya mendapatkan kesalahan ini _ Hai, sekarang saya memiliki kesalahan ini - / usr / bin / ld: melewatkan tidak kompatibel / usr / lib / x86_64-linux-gnu / gcc / x86_64- linux-gnu / 4.5.2 / libstdc ++. a ketika mencari -lstdc ++ / usr / bin / ld: tidak dapat menemukan -lstdc ++ collect2: ld kembali 1 status keluar make: *** [nachos] Kesalahan 1 ada ide tentang cara memperbaikinya ini? Apa yang harus saya lakukan?
Ashish Agarwal

Jawaban:


352

Anda melewatkan paket dev 32 libc dev:

Di Ubuntu disebut libc6-dev-i386 - do sudo apt-get install libc6-dev-i386. Lihat di bawah untuk instruksi tambahan untuk Ubuntu 12.04.

Di distro Red Hat , nama paketnya adalah glibc-devel.i686(Terima kasih atas komentar David Gardner).

Pada CentOS 5.8 , nama paketnya adalah glibc-devel.i386(Terima kasih atas komentar JimKleck).

Pada CentOS 6/7 , nama paketnya adalah glibc-devel.i686.

Pada SLES itu disebut glibc-devel-32bit - do zypper in glibc-devel-32bit.

Di Gentoo disebut sys-libs/glibc- do emerge -1a sys-libs/gcc [ sumber ] (Catatan: Seseorang dapat menggunakan equeryuntuk mengkonfirmasi ini benar; lakukan equery belongs belongs /usr/include/gnu/stubs-32.h)

Di ArchLinux , nama paketnya adalah lib32-glibc- do pacman -S lib32-glibc.


Apakah Anda menggunakan Ubuntu 12,04 ? Ada masalah yang diketahui yang menempatkan file di lokasi yang tidak standar . Anda juga harus melakukan:

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)

suatu tempat sebelum Anda membangun (katakanlah di .bashrc Anda).


Jika Anda juga mengkompilasi kode C ++, Anda juga memerlukan pustaka stdc ++ 32 bit. Jika Anda melihat peringatan ini:

.... / usr / bin / ld: tidak dapat menemukan -lstdc ++ ....

Di Ubuntu Anda perlu melakukannya sudo apt-get install g++-multilib

Pada CentOS 5 Anda harus melakukannyayum install libstdc++-devel.i386

Pada CentOS 6 Anda harus melakukannyayum install libstdc++-devel.i686

Silakan mengedit dalam paket untuk sistem lain.


2
Mungkin alasan saya tidak menemukan paket itu adalah laptop saya 32 bit ... Namun saya menemukannya libc-dev-amd64. Salahku.
Keith Layne

1
Ya, saya katakan dia mungkin menggunakan mesin 64 bit, itulah sebabnya file tersebut hilang. Pada mesin 64 bit saya, stubs.h (yang dia miliki) ada di libc6-dev, sedangkan stubs-32.h (yang tidak dia miliki) ada di libc6-dev-i386. Tip yang bagus tentang apt-file - Saya tidak tahu tentang hal itu :)
Timothy Jones

8
Anda dapat mengambil versi 32 bit perpustakaan itu dengansudo apt-get install g++-multilib
Timothy Jones

1
Bagi mereka yang menemukan ini pada distro berbasis Red Hat, paketnya adalah glibc-devel.i686 (saya baru saja melakukannya dan jawaban ini sangat membantu untuk mengarahkan saya ke arah yang benar :)
David Gardner

2
Ada masalah yang diketahui pada Ubuntu 12.04 yang menempatkan file ini di direktori non-standar setelah instalasi. Solusi ini berhasil bagi saya di akhir gcc.gnu.org/ml/gcc/2012-02/msg00314.html .
Eric Chen

55

Dari situs web GNU UPC :

Build kompiler gagal dengan kesalahan fatal: gnu / stubs-32.h: Tidak ada file atau direktori tersebut

Pesan kesalahan ini muncul pada sistem 64 bit di mana fitur multilib GCC / UPC diaktifkan, dan itu menunjukkan bahwa versi 32 bit libc tidak diinstal. Ada dua cara untuk memperbaiki masalah ini:

  • Instal glibc versi 32 bit (mis. Glibc-devel.i686 di Fedora, CentOS, ..)
  • Nonaktifkan build 'multilib' dengan memasok sakelar "--disable-multilib" pada perintah konfigurasi kompiler

8
terima kasih atas jawaban yang sangat berguna: --disable-multilibbagian
nujum

3
@ djhaskin987, gccupc.org bukan sumbernya, gcc.gnu.org adalah
Jonathan Wakely

Saya melakukan 'yum install glibc-devel.i686' pada x64 centos 6.4
plhn

1
Bagaimana Anda melakukan ini dengan sistem make berbasis autoconf? Saya sudah mencoba melewati --disable-multilib, tetapi tidak mengubah apa pun. Saya tidak memiliki akses root untuk menginstal paket multilib.
user632657

9

Coba lakukan a sudo apt-get install libc6-dev.

apt-file memberitahu saya bahwa file tersebut milik paket itu.


Terima kasih atas jawaban Anda, ini sangat membantu: D
Ashish Agarwal

Ini tidak cukup pada mesin multiarch karena Anda masih akan mendapatkan kesalahan ini bahkan jika Anda memiliki libc6-dev versi terbaru yang diinstal.
jeremiah


2

Saya mendapatkan kesalahan berikut pada kotak fedora 18:


1. /usr/include/gnu/stubs.h:7:27: kesalahan fatal: gnu / stubs-32.h: Tidak ada kompilasi file atau direktori yang dihentikan.

Saya telah menginstal glibc.i686 dan glibc-devel.i686, kemudian kompilasi gagal dengan kesalahan berikut:

2. / usr / bin / ld: melewatkan yang tidak kompatibel /usr/lib/gcc/x86_64-redhat-linux/4.7.2/libgcc_s.so saat mencari -lgcc_s / usr / bin / ld: tidak dapat menemukan -lgcc_s collect2: error : ld mengembalikan 1 status keluar

Larutan:

Saya menginstal (yum install) glibc.i686 glibc-devel.i386 dan libgcc.i686 untuk menyingkirkan masalah kompilasi.

Sekarang kompilasi untuk 32 bit (-m32) berfungsi dengan baik.


1

Hmm ya saya di ubuntu 12.04 dan saya mendapat kesalahan yang sama ketika mencoba untuk mengkompilasi gcc 4.7.2

Saya mencoba menginstal libc6-dev-i386paket dan mendapatkan yang berikut:

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

Saya juga mengatur variabel lingkungan yang benar di 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)

Namun, saya masih mendapatkan kesalahan kemudian saya cukup menyalin stubs-32.hke tempat gcc mengharapkan menemukannya setelah melakukan diff cepat:

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$

Itu sedang dikompilasi sekarang, mari kita lihat apakah ia mengeluh lebih ...


Aneh. Paket itu pasti tersedia dalam 12,04 (Precise) lihat package.ubuntu.com/precise/libc6-dev-i386
Timothy Jones

0

FWIW, baunya seperti kesalahan (atau setidaknya sumber potensi rasa sakit di masa depan) untuk menggunakan file dari / usr / termasuk ketika kompilasi silang.


1
Saya pikir dia sedang mencoba untuk membangun toolchain, bukan kompilasi silang dengan yang termasuk.
Keith Layne

0

gnu/stubs-32.htidak diarahkan termasuk dalam program. Ini adalah file header jenis back-end gnu/stubs.h, sama seperti gnu/stubs-64.h. Anda dapat menginstal multilibpaket untuk menambahkan keduanya.


0

# sudo apt-get install g ++ - multilib

Haruskah memperbaiki kesalahan ini pada mesin 64-bit (Debian / Ubuntu).


0

Jika Anda menghadapi masalah ini di terminal Mac-OSX dengan python, coba perbarui versi paket yang Anda gunakan. Jadi, buka file Anda dengan python dan di mana Anda menentukan paket, perbarui paket itu ke versi terbaru yang tersedia di internet.


0

Tentang penggunaan Debian / Ubuntu:

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.