如何使用特殊的sysroot正确编译gcc工具链?

如何使用特殊的sysroot正确编译gcc工具链?

我尝试编译一个新的gcc,包括binutilsglibc.由于我无法成为 root,所以我想将其全部安装在~/local.我设置这些变量:

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

我使用以下配置构建了binutisgccglibc(完全按照此顺序):

../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)。

然而,在正确编译并安装后binutilsgccgcc配置时无法编译简单的程序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位Ubuntu 12.04(“精确”)的服务器,但我认为这与系统无关。三个工具链组件的版本应该相互匹配,因为 openSuSE 12.2 具有这种组合。

答案1

您必须添加libc_cv_forced_unwind=yes libc_cv_c_cleanup=yes到 glibc 的配置命令,以避免配置尝试构建和运行测试程序并因此而窒息。问题是文件crt1.ocrti.olibc.{a,so}都是crtn.o您尚未安装的 glibc 库的一部分。

从Linux From Scratch中学到:关于 glibc 的文章

相关内容