|
发表于 2008-7-19 23:26:51
|
显示全部楼层
Post by 聚焦深空;1875541
没道理,如果我真的准备用newlib的c库怎么办?回头研究下。
经过最新研究,阻止GCC 4.3在没有头文件的情况下静态编译的因素有两个:
1、decimal-float的支持需要宿主头文件FENV.h。这可以通过参数--enable-decimal-float=no禁止掉。
2、现在Linux下编译的线程模型默认为posix。且即使使用--disable-threads或者--enable-threads=no 甚至--enable-threads=single都会被忽略。这一点在本机编译的情形下验证。这个需要一个补丁:
cp gcc/configure{,.orig}
sed -e s/x\$\{thread_file\}/x/ gcc/configure.orig >gcc/configure
目前还在研究这样编译的gcc是否能编译glibc。
顺便说一下,我觉得第二点绝对是一个BUG,因为configure.ac的相关内容如下
if test x${thread_file} = x; then
# No thread file set by target-specific clauses in config.gcc,
# so use file chosen by default logic above
thread_file=${target_thread_file}
fi
这里指出:仅当config.gcc文件里面没有设置线程库的时候,才会根据“以上逻辑”设置变量thread_file。但所谓“以上逻辑”正是检查用户设置的代码。因此,如果config,gcc能够检测到线程库,用户指定的设置就不再起作用。
更新:最新研究发现,GCC4.3比以前的版本更依赖于--build的设定。关于线程的设置,如果没有--build参数,则以上提到的config.gcc脚本会强行设置thread_file参数,把用户设置覆盖掉。
结论是:在GCC4.3即使要进行本机编译,最好也加上--build参数。采用这种方法,就不需要补丁。 |
|