web-dev-qa-db-ja.com

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

gccbinutilsを含む新しいglibcをコンパイルしようとしています。私はrootになれないので、すべて~/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をコンパイルし、次に新しいbinutilsにリンクされているgccをコンパイルし、最後に2つがglibcをコンパイルするというものでした(システムのglibc of /usr/lib)。

ただし、binutilsgccが正しくコンパイルおよびインストールされた後、gccglibcの構成中に単純なプログラムのコンパイルに失敗します。

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

何か間違った設定をしましたか?

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

2
Johannes

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

Linuxからゼロから学んだ: glibcに関する記事

1
Jozef