web-dev-qa-db-ja.com

Nachosソースコードのコンパイル中にエラー「gnu / stubs-32.h:No such file or directory」

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を使用する場合を除き、すべて正常に動作しています。

157
Ashish Agarwal

32ビットのlibc devパッケージがありません:

Ubuntuでは、libc6-dev-i386と呼ばれます-Sudo apt-get install libc6-dev-i386を実行します。 Ubuntu 12.04の追加手順については、以下を参照してください。

Red Hatディストリビューションでは、パッケージ名はglibc-devel.i686です(David Gardnerのコメントのおかげ)。

CentOS 5.8では、パッケージ名はglibc-devel.i386です(JimKleckのコメントのおかげです)。

CentOS 6/7では、パッケージ名はglibc-devel.i686です。

SLESglibc-devel-32bit-do zypper in glibc-devel-32bitと呼ばれます。

Gentooでは、sys-libs/glibc-do emerge -1a sys-libs/gcc [- source ](注:これが正しいことを確認するためにequeryを使用できます; do equery belongs belongs /usr/include/gnu/stubs-32.h

ArchLinuxでは、パッケージ名はlib32-glibc-do pacman -S lib32-glibcです。


Ubuntu 12.04を使用していますか? ファイルを標準以外の場所に置く既知の問題 があります。 also する必要があります:

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を行う必要があります

他のシステムのパッケージを自由に編集してください。

325
Timothy Jones

GNU UPC Webサイト から:

コンパイラのビルドが致命的なエラーで失敗する:gnu/stubs-32.h:そのようなファイルまたはディレクトリはありません

このエラーメッセージは、GCC/UPC multilib機能が有効になっている64ビットシステムで表示され、32ビットバージョンのlibcがインストールされていないことを示します。この問題を修正するには2つの方法があります。

  • Glibcの32ビットバージョンをインストールします(Fedora、CentOSなどでglibc-devel.i686など)。
  • コンパイラー構成コマンドに「--disable-multilib」スイッチを指定して、「multilib」ビルドを無効にします
54
ignis

Sudo apt-get install libc6-devを試してください。

apt-fileは、問題のファイルがそのパッケージに属していることを教えてくれます。

9
Keith Layne

これは現在GCC wiki FAQにあります。 http://gcc.gnu.org/wiki/FAQ#gnu_stubs-32.h を参照してください。

7
Jonathan Wakely

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/lib/gcc/x86_64-redhat-linux/4.7.2/libgcc_s.soをスキップします/ usr/bin/ld:-lgcc_s collect2:エラーが見つかりません:ldが1つの終了ステータスを返しました

溶液:

Glibc.i686 glibc-devel.i386とlibgcc.i686をインストール(yum install)して、コンパイルの問題を取り除きました。

32ビット(-m32)のコンパイルが正常に機能するようになりました。

2
user2223366

うーん、私は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$

それは今コンパイル中です、それがもっと文句を言うかどうか見てみましょう...

1
Victor Parmar

Pythonを搭載したMac-OSX端末でこの問題に直面している場合は、使用しているパッケージのバージョンを更新してみてください。そのため、Pythonでファイルを指定し、パッケージを指定した場所に移動して、インターネットで入手可能な最新バージョンに更新します。

0
D.Bhatia

gnu/stubs-32.hはプログラムに含まれません。 gnu/stubs.hと同様、gnu/stubs-64.hのバックエンドタイプのヘッダーファイルです。 multilibパッケージをインストールして、両方を追加できます。

0
user2775212

#Sudo apt-get install g ++-multilib

64ビットマシン(Debian/Ubuntu)でこのエラーを修正する必要があります。

0
skrishnakar

FWIW、クロスコンパイル時に/ usr/includeのファイルを使用するのはエラー(または少なくとも将来の痛みの潜在的な原因)のような匂いがします。

0
user47559