特別なsysrootを使用してgccツールチェーンを正しくコンパイルする方法は?

特別なsysrootを使用してgccツールチェーンを正しくコンパイルする方法は?

とをgcc含む新しいものをコンパイルしてみました。ルートにはできないので、次の変数をすべてインストールしたかったのです。binutilsglibc~/local

PREFIX=~/local && export PREFIX
PATH=~/local/bin:$PATH && export PATH

次の構成を使用してbinutisgccおよび(正確にこの順序で)ビルドしました。glibc

../binutils-2.22/configure --prefix=$PREFIX --with-sysroot
../gcc-4.7.3/configure --prefix=$PREFIX
CC='gcc --sysroot=~/local' ../glibc-2.15/configure  --prefix=$PREFIX

私の考えは、最初にコンパイルしbinutilsてから、gcc新しい新しいbinutilsにコンパイルし、最後に両方をコンパイルすることglibcです(私のシステムには必要ありませんglibc/usr/lib

ただし、正しくコンパイルしてインストールした後に次の設定binutilsgcc行うgccと、単純なプログラムはコンパイルされませんglibc

int main() { return 0; }

出力(短縮):

> gcc --sysroot=~/local/ test.cpp -o test
ld: cannot find crt1.o: No such file or directory
ld: cannot find crti.o: No such file or directory
ld: cannot find -lc
ld: cannot find crtn.o: No such file or directory

ただし、以下はファイルを表示しません。

find ~/local -name crti.o

私の設定に問題がありますか?

私のシステムはUbuntu 12.04 64ビット(「正確に」)を実行しているサーバーですが、これはシステムとは関係がないと思います。 openSuSE 12.2にはこれらの組み合わせがあるため、3つのツールバーコンポーネントのバージョンは互いに一致する必要があります。

答え1

libc_cv_forced_unwind=yes libc_cv_c_cleanup=yesテストプログラムをビルドして実行しようとしたときに窒息する構成を避けるには、glibcに設定コマンドを追加する必要があります。問題はcrt1.ocrti.oファイルがlibc.{a,so}すべてcrtn.oインストールされていないglibcライブラリの一部であることです。

Linuxで最初から学ぶ:glibcに関する記事

関連情報