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


170

ラップトップにナチョスをインストールしようとしていますが、ラップトップに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      

これは問題ありませんが、nachos osのソースコードをビルドしようとすると、makeを使用してこのエラーが発生します-

/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を使おうとするときを除いて、すべてがうまく機能しています。


1
提案をありがとう、プログラムはコンパイルを開始しますが、このエラーが発生します_こんにちは、私はこのエラーを抱えています-/ usr / bin / ld:互換性のない/ usr / lib / x86_64-linux-gnu / gcc / x86_64-をスキップしますlinux-gnu / 4.5.2 / libstdc ++。a -lstdc ++ / usr / bin / ldを検索すると、-lstdc ++ collect2が見つかりません:ldが1の終了ステータスを返しましたmake:*** [nachos]エラー1修正方法に関する任意のアイデアこの ?これについて私は何をすべきですか?
Ashish Agarwal 2011

回答:


352

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

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

のRed Hatディストリビューションは、パッケージ名があるglibc-devel.i686(デビッド・ガードナーさんのコメントに感謝)。

のCentOS 5.8、パッケージ名があるglibc-devel.i386(JimKleckさんのコメントに感謝)。

上のCentOSの6月7日、パッケージ名がありますglibc-devel.i686

上のSLESそれは、glibcの-develの-32ビットと呼ばれています-くださいzypper in glibc-devel-32bit

のGentooそれは呼ばれていますsys-libs/glibc-やるemerge -1a sys-libs/gcc [ ソース ](注:一つは使用することができequery、これが正しいことを確認するために、行いますequery belongs belongs /usr/include/gnu/stubs-32.h

ArchLinux、パッケージ名があるlib32-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

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


2
多分私がそのパッケージを見つけられなかった理由は私のラップトップが32ビットであることです...しかし私は見つけましたlibc-dev-amd64。私の悪い。
Keith Layne、2011

1
ええ、私はおそらく64ビットマシンにいると思います。これがファイルが見つからない理由です。私の64ビットマシンでは、stubs.h(彼が持っています)はlibc6-devにありますが、stubs-32.h(彼はしません)はlibc6-dev-i386にあります。apt-fileについての良いヒント-私はそれについて知りませんでした:)
Timothy Jones

8
あなたがそのライブラリの32ビット版を拾うことができますsudo apt-get install g++-multilib
ティモシー・ジョーンズ

1
Red Hatベースのディストリビューションでこれに遭遇した人のためのパッケージはglibc-devel.i686です(私が行ったばかりで、この答えは私を正しい方向に向けるのに役立ちました:)
David Gardner

2
Ubuntu 12.04には、インストール後にこのファイルを標準以外のディレクトリに配置するという既知の問題があります。このソリューションは、最後にgcc.gnu.org/ml/gcc/2012-02/msg00314.htmlで機能しました
Eric Chen

55

GNU UPCのウェブサイト

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

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

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

8
特に役立つ回答をありがとう:--disable-multilibパート
ネクロマンサー

3
@ djhaskin987、gccupc.orgはソースではなく、gcc.gnu.orgは
Jonathan Wakely

私はx64 centos 6.4で 'yum install glibc-devel.i686'を実行しました
2013年

1
autoconfベースのmakeシステムでこれをどのように行いますか?--disable-multilibを渡してみましたが、何も変わりません。multilibパッケージをインストールするためのrootアクセス権がありません。
user632657 14

9

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

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


あなたの答えをありがとう、それは多くの助けとなりました:D
Ashish Agarwal

libc6-devの最新バージョンがインストールされている場合でも、このエラーが発生するため、マルチアーチマシンではこれでは不十分です。
エレミヤ2012年


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


1

うーん、私は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するので、簡単なdiffを実行した後、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$

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


奇数。そのパッケージは12.04(正確)で確実に利用可能ですpackages.ubuntu.com/precise/libc6-dev-i386を
ティモシージョーンズ

0

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


1
彼はツールチェーンを構築しようとしていると思いますが、それらのインクルードとクロスコンパイルしないでください。
キースレイン、2011

0

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


0

#sudo apt-get install g ++-multilib

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


0

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


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.