gcc
とbinutils
を含む新しいglibc
をコンパイルしようとしています。私はrootになれないので、すべて~/local
にインストールしたいと思います。これらの変数を設定します。
PREFIX=~/local && export PREFIX
PATH=~/local/bin:$PATH && export PATH
binutis
、gcc
、および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
)。
ただし、binutils
とgcc
が正しくコンパイルおよびインストールされた後、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
何か間違った設定をしましたか?
私のシステムは64ビットのUbuntu12.04(「正確」)を実行しているサーバーですが、システムに関連していないと思います。 openSuSE 12.2にはこの組み合わせがあるため、3つのツールチェーンコンポーネントのバージョンは互いに適合している必要があります。
Glibcのconfigureコマンドにlibc_cv_forced_unwind=yes libc_cv_c_cleanup=yes
を追加して、configureがテストプログラムをビルドして実行しようとしたり、それを窒息させたりしないようにする必要があります。問題は、ファイルcrt1.o
、crti.o
、libc.{a,so}
、およびcrtn.o
がすべて、まだインストールしていないglibcライブラリの一部であるということです。
Linuxからゼロから学んだ: glibcに関する記事