180

ラップトップに 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 を使用しようとする場合を除いて、すべて正常に動作しています。

4

11 に答える 11

379

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

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

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

CentOS 5.8では、パッケージ名は( JimKleckglibc-devel.i386さんのコメントに感謝します) です。

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

SLESではglibc-devel-32bit - do と呼ばれますzypper in glibc-devel-32bit

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

ArchLinuxでは、パッケージ名は-dolib32-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

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

于 2011-09-14T07:25:35.477 に答える
55

GNU UPC ウェブサイトから:

コンパイラのビルドが致命的なエラーで失敗する: gnu/stubs-32.h: No such file or directory

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

  • glibc の 32 ビット バージョンをインストールします (例: Fedora、CentOS では glibc-devel.i686 など)。
  • コンパイラ構成コマンドで「--disable-multilib」スイッチを指定して、「multilib」ビルドを無効にします。
于 2013-01-21T13:10:06.800 に答える
9

をやってみてくださいsudo apt-get install libc6-dev

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

于 2011-09-14T07:24:32.937 に答える
7

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

于 2013-09-05T08:33:37.897 に答える
2

うーん、私は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がそれを見つけると予想していた場所にコピーしました:

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$

それは今コンパイルしています、それがもっと不平を言うかどうか見てみましょう...

于 2013-02-20T11:23:30.107 に答える
2

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) のコンパイルが正常に動作するようになりました。

于 2013-03-29T05:52:30.713 に答える
0

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

于 2011-09-14T19:08:25.523 に答える
0

# sudo apt-get install g++-multilib

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

于 2015-01-30T15:31:16.410 に答える
0

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

于 2013-09-13T06:00:15.990 に答える