web-dev-qa-db-ja.com

11.10にアップグレードしてからgccをビルドできなくなりました

月曜日に、Ubuntu 11.04(最初のインストール)から11.10にアップグレードしましたが、ソースからgccをビルドできなくなりました。アップグレードの前にgccパッケージをアンインストールするのを忘れていたため、Ubuntuは4.7.0コンパイラを安定版4.6.1に置き換えました。だから私は再びSVNソースをビルドしようとしましたが、失敗します。私は最近SVNリビジョン180193で試しました。

しばらくすると、ビルドが失敗して次のメッセージが表示されます。

/home/raphael/devel/gcc/build/./gcc/xgcc -B/home/raphael/devel/gcc/build/./gcc/ -B/usr/i686-pc-linux-gnu/bin/ -B/usr/i686-pc-linux-gnu/lib/ -isystem /usr/i686-pc-linux-gnu/include -isystem /usr/i686-pc-linux-gnu/sys-include    -g -O2 -O2  -I. -I. -I../../src/gcc -I../../src/gcc/. -I../../src/gcc/../include -I../../src/gcc/../libdecnumber -I../../src/gcc/../libdecnumber/bid -I../libdecnumber -I../../src/gcc/../libgcc -g -O2 -DIN_GCC   -W -Wall -Wwrite-strings -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes -Wold-style-definition  -isystem ./include  -fPIC -g -DHAVE_GTHR_DEFAULT -DIN_LIBGCC2 -fbuilding-libgcc -fno-stack-protector   -I. -I. -I../.././gcc -I../../../src/libgcc -I../../../src/libgcc/. -I../../../src/libgcc/../gcc -I../../../src/libgcc/../include -I../../../src/libgcc/config/libbid -DENABLE_DECIMAL_BID_FORMAT -DHAVE_CC_TLS  -DUSE_TLS -o _ashldi3.o -MT _ashldi3.o -MD -MP -MF _ashldi3.dep -DL_ashldi3 -c ../../../src/libgcc/../gcc/libgcc2.c \
    -fvisibility=hidden -DHIDE_EXPORTS
In file included from /usr/include/stdio.h:28:0,
             from ../../../src/libgcc/../gcc/tsystem.h:88,
             from ../../../src/libgcc/../gcc/libgcc2.c:29:
/usr/include/features.h:323:26: fatal error: bits/predefs.h: File or directory not found.

私はそれを設定しました:

~/devel/gcc/build$ ../src/configure --prefix=/usr --enable-languages=c++

そして、それでそれを作ります:

~/devel/gcc/build$ make -j4

念のため、中に壊れたものがある場合に備えて、ビルドディレクトリでrm -rf *を実行しました。しかし、助けにはならなかった。


それがバックストーリーです。私はそれを修正しようとし、bits/predefs.hを検索しました。 /usr/include/i386-linux-gnuの中にあります。私は一時的に問題を修正しました

~/devel/gcc/build$ C_INCLUDE_PATH=/usr/include/i386-linux-gnu make -j4

Gccがcrti.oを見つけられないと文句を言うので、これは一時的なものです。

/usr/lib/i386-linux-gnuで見つけることができます。 今私はcouldC_LIBRARY_PATHを設定します -実際には機能しません-しかし、私はここでシステムと戦っているような気がします。また、たとえ成功したとしても、私の新しく構築されたコンパイラはi386-linux-gnuのことも知りません。したがって、私が持っているすべてのプロジェクトのすべてのビルドの前に、C_LIBRARY_PATHC_INCLUDE_PATHを設定する必要があります。 I could .bashrcに追加しますが、システムを破壊しますさらに

だから、ビルドプロセスにどのように伝えるのですか:

  • 追加のinclude/libディレクトリがあること、および
  • それらを尊重するgccを構築する必要があるということですか?

編集:上記のエラーメッセージの原因となるコマンドを含めるのを忘れました。また、別の解決策を考えることができます:/usr/include/i386-linux-gnuから/usr/includeにコピーします(/usr/lib/i386-linux-gnuから/usr/libに同じもの)。しかし、それも正しくないと感じています。最後に、システムのgcc 4.6.1は、4.6シリーズにはないC++ 11機能を使用するものを除き、他のアプリケーションを問題なくコンパイルできます。

5
Raphael R.

このパッチを適用し、-enable-multiarchで設定します(multilibと混同しないでください):

(これは この以前のパッチ に取って代わります。)

2
ams

いくつかの資料:

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=644986

スクリプト全体を使用するのではなく、重要な部分は次のように思われます。

make FLAGS_FOR_TARGET="-B/usr/lib/i386-linux-gnu -I/usr/include/i386-linux-gnu"

正しい追加オプションで実行するには、インストール後にラッパースクリプトが必要なので、結果は完全にきれいではありません。たとえば、記事/usr/bin/gcc-4.7の例を次に示します。

#!/bin/sh

exec /opt/gcc-4.7/bin/gcc-4.7 -B/usr/lib/i386-linux-gnu -I/usr/include/i386-linux-gnu "$@"
2
Earl

Ubuntu 11.10はマルチアーカイブをサポートします。つまり、ライブラリファイルを/usr/libではなく/usr/lib/i386-linux-gnu(32ビット)または/usr/lib/x86_64-linux-gnu(64ビット)に配置する必要があります。

次のようなものを使用します。

CFLAGS=-I/usr/include/i386-linux-gnu ./configure [options]

おそらくLDFLAGS=-L/usr/lib/i386-linux-gnuも指定する必要があります。

余談:パスがきれいに見えない:/usr/i686-pc-linux-gnu/lib/--libdirなどのオプションを使用して修正する必要がある場合があります。

1
Lekensteyn

SVNからの構築以来、同じリビジョンからの構築であると確信していますか?別名、問題がアップストリームでないことを確認してください:-)

1
balloons