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を使用する場合を除き、すべて正常に動作しています。
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
を行う必要があります
他のシステムのパッケージを自由に編集してください。
GNU UPC Webサイト から:
コンパイラのビルドが致命的なエラーで失敗する:gnu/stubs-32.h:そのようなファイルまたはディレクトリはありません
このエラーメッセージは、GCC/UPC multilib機能が有効になっている64ビットシステムで表示され、32ビットバージョンのlibcがインストールされていないことを示します。この問題を修正するには2つの方法があります。
- Glibcの32ビットバージョンをインストールします(Fedora、CentOSなどでglibc-devel.i686など)。
- コンパイラー構成コマンドに「--disable-multilib」スイッチを指定して、「multilib」ビルドを無効にします
Sudo apt-get install libc6-dev
を試してください。
apt-file
は、問題のファイルがそのパッケージに属していることを教えてくれます。
これは現在GCC wiki FAQにあります。 http://gcc.gnu.org/wiki/FAQ#gnu_stubs-32.h を参照してください。
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)のコンパイルが正常に機能するようになりました。
うーん、私は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$
それは今コンパイル中です、それがもっと文句を言うかどうか見てみましょう...
Pythonを搭載したMac-OSX端末でこの問題に直面している場合は、使用しているパッケージのバージョンを更新してみてください。そのため、Pythonでファイルを指定し、パッケージを指定した場所に移動して、インターネットで入手可能な最新バージョンに更新します。
gnu/stubs-32.h
はプログラムに含まれません。 gnu/stubs.h
と同様、gnu/stubs-64.h
のバックエンドタイプのヘッダーファイルです。 multilib
パッケージをインストールして、両方を追加できます。
#Sudo apt-get install g ++-multilib
64ビットマシン(Debian/Ubuntu)でこのエラーを修正する必要があります。
FWIW、クロスコンパイル時に/ usr/includeのファイルを使用するのはエラー(または少なくとも将来の痛みの潜在的な原因)のような匂いがします。