Ant-Veil

Caspar Blog

OpenSolaris 编译安装 gcc-4.3.1 成功

| Comments

编译时间为 1 小时零 12 分钟,调试错误的时间累计就不知道多少了。要编译的语言为 c,c++,f95。之前出过 N 多的错误,因为时间过去太久了,有些错误的名字记不太清楚了,只大概地写一下:

Fatal error in reader: makefile, line XXX: Unexpected end of line seen

解决这个问题,需要安装 gmake,因为 OpenSolaris 中自带的语法和 gnu make 的语法可能不一样。

接下去碰到的问题,是采用以下编译选项的:

./configure --prefix=/usr/local \
--with-gnu-ld=/usr/gnu/bin/ld; \
gmake all

出错提示有很多,都记不太清了,比如:

configure: error: cannot compute suffix of object files: cannot compile

[gmake] *** cannot create rule to make target `all' ***

ld errors: no .eh_frame_hdr table will be created.

在网上找到这个网页:http://www.linuxidc.com/Linux/2008-07/14125p2.htm

看到如下的 configure 选项:

./configure --prefix=/usr
--libdir=/usr/lib
--libexecdir=/usr/lib
--enable-shared
--enable-threads=posix
--enable-__cxa_atexit
--enable-c99
--enable-long-long
--enable-clocale=gnu
--disable-libstdcxx-pch
--disable-multilib
--enable-languages=c,c++,f95

第 1,2,3 不是关键选项。继续查找资料,第 4 项在 gcc 的 README 里面说明了是默认打开的。第 5 项我把 posix 改成了 solaris,第 6 项在有 glibc 的情况下下才有用,第 7,8,9,10 没找到相关说明,第 11 项是禁止多个平台的库都编译(我觉得我过去几天没编译成功的原因很可能就是这样的,因为总是在 AMD64 相关的目录下编译,我的机子可是 i386 啊…),最后一项指定要安装的语言,我下的是 core 包和自己要装的语言包,就用不着这个命令了。

所以最后选定编译选项为:

./configure --prefix=/usr/local \
--enable-threads=posix \
--disable-multilib \
--with-gnu-ld=/usr/gnu/bin/ld

make 的时候命令是

make bootstrap

它显式指定了 bootstrap,但是我看到帮助文档上说默认是开启了 3-stage 的 bootstrap 模式的,所以我觉得这也不是关键。

中途只报了一个错,错误的内容大致是

libgcc.map has not a good format and tries without success to use it as ld script

查到解决方案是,把/gcc-4.3.1/gcc/config/t-slibgcc-sld 文件第 13 行修改一下,把-M 参数改为-Map 参数,修改后的那一行如下:

-Wl,-Map,$(SHLIB_MAP) -o $(SHLIB_DIR)/$(SHLIB_SONAME).tmp \

然后重新 configure XXX, gmake bootstrap, gmake install

整个过程真是艰辛阿,而且 gcc 编译出来之后发现,原来不是 gcc 的问题,还得想办法找 glibc 在 OpenSolaris 上的 porting。

Comments