我尝试编译一个新的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
,然后编译gcc
与新的 binutils 链接的 ,最后,两个编译glibc
(不需要我的系统glibc
的/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位Ubuntu 12.04(“精确”)的服务器,但我认为这与系统无关。三个工具链组件的版本应该相互匹配,因为 openSuSE 12.2 具有这种组合。
答案1
您必须添加libc_cv_forced_unwind=yes libc_cv_c_cleanup=yes
到 glibc 的配置命令,以避免配置尝试构建和运行测试程序并因此而窒息。问题是文件crt1.o
、crti.o
和libc.{a,so}
都是crtn.o
您尚未安装的 glibc 库的一部分。
从Linux From Scratch中学到:关于 glibc 的文章