Nachos kaynak kodunu derlerken “gnu / stubs-32.h: Böyle bir dosya veya dizin yok” hatası


170

Nachos'u dizüstü bilgisayarıma kurmaya çalışıyorum ve dizüstü bilgisayarımda Ubuntu 11.04 var.

Kod C ve böylece oluşturmak için çapraz derleyici gerekir varsayalım. Benim sorunum burada. MIPS çapraz derleyicisinin kaynak kodunu komutunu kullanarak indirdim

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

ve kullanarak sıkıştırmayı açtım

tar zxvf mips-decstation.linux-xgcc.gz      

Bu iyi, ama make kullanarak nachos os kaynak kodunu oluşturmaya çalıştığımda, bu hatayı alıyorum -

/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

Burada verilen talimatları takip etmeye çalışıyorum - http://mll.csie.ntu.edu.tw/course/os_f08/217.htm ve make yapmaya çalıştığım zamanlar dışında her şey iyi çalışıyor.


1
Önerileriniz için teşekkür ederim, program şimdi derlemeye başlıyor ama bu hatayı alıyorum _ Merhaba, şimdi bu hatayı aldım - / usr / bin / ld: uyumsuz / usr / lib / x86_64-linux-gnu / gcc / x86_64- linux-gnu / 4.5.2 / libstdc ++. a -lstdc ++ / usr / bin / ld için arama yaparken: -lstdc ++ collect2: ld bulunamadı 1 çıkış durumu döndürür: *** [nachos] Hata 1 nasıl düzeltilir hakkında herhangi bir fikir bu ? Bununla ilgili ne yapmalıyım?
Ashish Agarwal

Yanıtlar:


352

32 bit libc dev paketini kaçırıyorsunuz:

On Ubuntu o libc6-dev-i386 denir - do sudo apt-get install libc6-dev-i386. Ubuntu 12.04 için ek talimatlar için aşağıya bakın.

On Red Hat dağıtımlarının paket adıdır glibc-devel.i686(David Gardner'ın yorumuna teşekkürler).

On CentOS 5.8 , paket adının glibc-devel.i386(JimKleck yorumuna teşekkürler).

On / 7 CentOS 6 , paket adının glibc-devel.i686.

On SLES o glibc-devel-32bit deniyor - do zypper in glibc-devel-32bit.

On Gentoo denir sys-libs/glibc- do emerge -1a sys-libs/gcc [ kaynak ] (Not: Bir kullanabilir equerybu doğru olup olmadığını teyit etmek; yapmak equery belongs belongs /usr/include/gnu/stubs-32.h)

ArchLinux üzerinde , paket adı lib32-glibc- do pacman -S lib32-glibc.


Ubuntu 12.04 kullanıyor musunuz ? Orada bilinen bir sorun olduğunu olmayan bir standart konumda koyar dosyaları . Sen edeceğiz ayrıca yapmanız gerekir:

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)

inşa etmeden önce bir yerde (diyelim ki .bashrc).


Ayrıca C ++ kodunu derliyorsanız, 32 bit stdc ++ kütüphanesine de ihtiyacınız olacaktır. Bu uyarıyı görürseniz:

.... / usr / bin / ld: -lstdc ++ bulunamıyor ....

On Ubuntu yapmanız gerekecektir sudo apt-get install g++-multilib

On CentOS 5 yapmanız gerekecektiryum install libstdc++-devel.i386

On CentOS 6 yapmanız gerekecektiryum install libstdc++-devel.i686

Lütfen diğer sistemlerin paketlerinde düzenleme yapmaktan çekinmeyin.


2
Belki de bu paketi bulamamamın nedeni, dizüstü bilgisayarımın 32 bit olmasıdır ... Ancak buldum libc-dev-amd64. Benim hatam.
Keith Layne

1
Evet, muhtemelen 64 bitlik bir makinede olduğunu söyleyebilirim, bu yüzden dosya eksik. 64 bit makinemde stubs.h (sahip olduğu) libc6-dev'de, stubs-32.h (sahip olmadığı) libc6-dev-i386'da. Apt dosyası hakkında iyi bir ipucu - Ben bilmiyordum :)
Timothy Jones

8
Bu kütüphanenin 32 bitlik sürümünü bir ile alabilirsinizsudo apt-get install g++-multilib
Timothy Jones

1
Red Hat tabanlı dağıtımlarda bununla karşılaşanlar için, paket glibc-devel.i686 (Az önce yaptım ve bu cevap beni doğru yöne yönlendirmek için yardımcı oldu :)
David Gardner

2
Kurulumdan sonra bu dosyayı standart olmayan bir dizine koyan Ubuntu 12.04'te bilinen bir sorun var. Bu çözüm gcc.gnu.org/ml/gcc/2012-02/msg00314.html sonunda benim için çalıştı .
Eric Chen

55

Gönderen GNU UPC web :

Derleyici derlemesi önemli hata ile başarısız oluyor: gnu / stubs-32.h: Böyle bir dosya veya dizin yok

Bu hata iletisi, GCC / UPC çok düzeyli özelliğinin etkinleştirildiği 64 bit sistemlerde görünür ve 32 bit libc sürümünün yüklü olmadığını gösterir. Bu sorunu düzeltmenin iki yolu vardır:

  • 32 bit glibc sürümünü yükleyin (örneğin Fedora, CentOS, vb. Glibc-devel.i686)
  • Derleyici yapılandırma komutunda "--disable-multilib" anahtarı sağlayarak 'multilib' derlemesini devre dışı bırakma

8
özellikle yararlı bir cevap için teşekkür ederim: --disable-multilibbölüm
büyücü

3
@ djhaskin987, gccupc.org kaynak değil, gcc.gnu.org
Jonathan Wakely

X64 centos 6.4 üzerinde 'yum install glibc-devel.i686' yaptım
plhn

1
Bunu bir autoconf tabanlı markalama sistemi ile nasıl yaparsınız? --Disable-multilib'i geçmeyi denedim, ama hiçbir şeyi değiştirmiyor. Multilib paketini kurmak için root erişimim yok.
user632657

9

Bir yapmayı deneyin sudo apt-get install libc6-dev.

apt-file bana söz konusu dosyanın bu pakete ait olduğunu söylüyor.


Cevabınız için teşekkürler, çok yardımcı oldu: D
Ashish Agarwal

Libc6-dev'in en son sürümüne sahip olsanız bile bu hatayı almaya devam edeceğiniz için bu çok amaçlı bir makinede yeterli değildir.
jeremiah


2

Fedora 18 kutusunda aşağıdaki hatayı alıyordum:


1. /usr/include/gnu/stubs.h:7:27: ölümcül hata: gnu / stubs-32.h: Böyle bir dosya veya dizin derlemesi sonlandırılmadı.

Glibc.i686 ve glibc-devel.i686'yı yükledim, ardından derleme aşağıdaki hatayla başarısız oldu:

2. / usr / bin / ld: uyumsuz /usr/lib/gcc/x86_64-redhat-linux/4.7.2/libgcc_s.so, -lgcc_s / usr / bin / ld için arama yaparken -lgcc_s collect2: hatasını bulamıyor : ld 1 çıkış durumu döndürdü

Çözüm:

Derleme sorunundan kurtulmak için glibc.i686 glibc-devel.i386 ve libgcc.i686'yı yükledim (yum install).

Şimdi 32 bit (-m32) için derleme iyi çalışıyor.


1

Hmm iyi ben ubuntu 12.04 üzerinde ve gcc 4.7.2 derlemeye çalışırken aynı hatayı aldım

libc6-dev-i386Paketi yüklemeyi denedim ve aşağıdakileri aldım:

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

Ben de bash doğru ortam değişkenleri ayarlayın:

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)

Ancak, hala hatayı alıyordum sonra sadece stubs-32.hgcc hızlı bir fark yaptıktan sonra bulmayı beklediği yere kopyalandı :

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$

Şimdi derleniyor, daha fazla şikayet edip etmediğine bakalım ...


Garip. Bu paket kesinlikle 12.04 (Kesin) olarak mevcuttur. Bkz. Packages.ubuntu.com/precise/libc6-dev-i386
Timothy Jones

0

FWIW, çapraz derleme sırasında / usr / include dosyalarının kullanılması gibi bir hata (veya en azından gelecekteki olası bir ağrı kaynağı) gibi kokuyor.


1
Sanırım bu zincirlerle çapraz derleme değil, araç zincirini inşa etmeye çalışıyor.
Keith Layne

0

gnu/stubs-32.hprogramlara dahil değildir. Bu bir arka uç tipi başlık dosyasıdır gnu/stubs.htıpkı gnu/stubs-64.h. Her multilibikisini de eklemek için paketi yükleyebilirsiniz .


0

# sudo apt-get install g ++ - multilib

64-bit makinelerde (Debian / Ubuntu) bu hatayı düzeltmelidir.


0

Python ile Mac-OSX terminalinde bu sorunla karşılaşıyorsanız, kullandığınız paketlerin sürümlerini güncellemeyi deneyin. Bu nedenle, python'daki dosyalarınıza gidin ve paketleri belirttiğiniz yerde, bunları internette mevcut olan en son sürümlere güncelleyin.


0

Debian / Ubuntu üzerinde:

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.