10

rootアクセス権のないシステムがありますが、現在のバージョンのGCC(4.7.2)をにインストールする必要があります。

システムはLinux2.6.18のx86_64ビルドを実行しており、すでにGCC 4.1を備えています(--versionはそれを使用してビルドされたと言っていますが、C ++はサポートされていません)。

編集5:この時点で、以下の手順は私が試したものの1つにすぎません。それ以来、私は数回掃除を始めました。必要なすべてのスイッチを使用してすべてを作成するために必要な正確な順序を詳しく説明してくれる人を探しています。

これは私がこれまでに行ったプロセスです(ここで、ROOTは私のホームディレクトリ内のフォルダです)

    make-3.82>./configure --prefix=$ROOT && make && make install && hash -r
binutils-2.23>./configure --prefix=$ROOT && make && make install
autoconf-2.69>./configure --prefix=$ROOT && make && make install
automake-1.9>./configure --prefix=$ROOT && make && make install
flex-2.5.37>./configure --prefix=$ROOT && make && make install
libunwind-1.1>./configure --prefix=$ROOT && make && make install
gcc-4.7.2-scratch>../gcc-4.7.2/configure --prefix=$ROOT \
    --disable-multilib --disable-nls --enable-languages=c,c++ \
    && make && make install && hash -r
ncurses-5.9>./configure --prefix=$ROOT && make && make install
texinfo-4.13>./configure --prefix=$ROOT && make && make install
glibc-2.14-scratch>touch $ROOT/etc/ld.so.conf

http://sourceforge.net/apps/trac/unattended/wiki/ModifyingTheBootDisk#PatchGLibcからのパッチでglibcにパッチを適用(2.14の行番号を修正)

glibc-2.14-scratch>../glibc-2.14/configure --prefix=$ROOT \
    --with-headers=$3_3_4_HEADERS && make && make install

私が追加したフラグは、を取り除くことでしundefined reference to '__isoc99_sscanf'た。それを修正するために実際にどのフラグの組み合わせが必要だったかはわかりませんが、これらのフラグの問題は修正されました。

gcc-4.7.2-scratch2>../gcc-4.7.2/configure --prefix=$ROOT \ 
    --disable-multilib --disable-nls --enable-languages=c,c++ \
    CPPFLAGS="-I$ROOT/include" CFLAGS="-g -O2 -lc" \
    CXXFLAGS="-g -O2 -lc" LDFLAGS="-L$ROOT/lib \
    -L$ROOT/lib64" && make && make install

GCCビルド中にこのエラーが発生します:

build/genmddeps ../../gcc-4.7.2/gcc/config/i386/i386.md > tmp-mddeps
build/genmddeps: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by build/genmddeps)

/ lib64のlibcはバージョン2.5であるため、エラーは理にかなっていますが、$ ROOT/libにインストールされたものをGCCで使用する方法がわかりません。

編集1:-rpathを追加しても効果はありませんでしたが、libディレクトリをLD_RUN_PATHとLD_LIBRARY_PATHに追加しました。これらのセットでは、エラーが発生したため、何も実行できませんでした[program_name]: error while loading shared libraries: /home/mrambiguous/root/lib/libc.so.6: ELF file OS ABI invalid

もう1つの奇妙な点は、-rpathの提案を試したときに、認識されないコマンドラインオプション(-Vなど)についてGCCからエラーが発生し始めたことです。システムのGCC4.1を使用するように設定する必要がありました。GCCの最初のビルドが何らかの理由で破損したのか、それともそもそも使用されていたのかはわかりません。

編集2:vimでlibc.so.6を開いて、プレーンテキストでABIに関する何かを見つけることができるかどうかを確認しました。そこには、著作権情報が含まれています。libc ABIs: UNIQUE IFUNC

また、GCC4.7.2が同じテキストブロックで機能していたことも確認します。Compiled by GNU CC version 4.7.2

編集3:$ ROOTを削除し、すべてを再インストールしました。-Vと-qversionが有効なオプションとして認識されないという同じ問題があります。

編集4:を使用してELFヘッダーを編集しようとしbrandelf -t SVR4 libc.so.6ましたが、新しいエラーが発生しますunexpected PLT reloc type 0x25

4

1 に答える 1

5

私は急いでいるので、あなたのエラーメッセージを詳細に分析することはできません。

新しいglibcと古いglibcは、ABIと互換性がないだけでなく、ヘッダーにも対応しています。gccバグ52922を参照してください。

したがって、ミキシングを行うと、発生したようなエラーが発生します。非常に注意する必要があります。

ハンドチューニングは絶望的に退屈です。

gcc-4.7.2を使用することが目標の場合は、GentooPrefixを使用することをお勧めします。私はRHEL5で実行されているGentooPrefixの多くのインスタンスを持っています(2.6.18カーネル、gcc-4.1、およびglibc-2.5があります)。これにより、glibc-2.5の上にgcc-4.7.2がコンパイルされます。

新しいglibcの使用を楽しみたい場合は、Prefix/libcを参照してください。ただし、これは進行中の作業です。多くの破損が予想されます。しかし、最新のツールチェーンを手作業でコンパイルしようとしているので、大きな欠点にはなりませんね。

于 2013-07-01T14:15:29.210 に答える