为什么我的erlang构建因Solaris Sparc上的核心转储而失败?

时间:2011-07-03 04:42:56

标签: erlang solaris sparc

(我已经得到了答案;我将回答我自己的问题,以便我可以分享我所学到的东西,并在将来拯救别人这个麻烦)

当我尝试在Solaris 10 Sparcv9上构建Erlang时,构建失败到中途:

cd lib && \
  ERL_TOP=/var/tmp/pkgbuild-0/erlang/sparcv9/erlang-otp-73b4221 PATH=/var/tmp/pkgbuild-0/erlang/sparcv9/erlang-otp-73b4221/bootstrap/bin:${PATH} \
        make opt SECONDARY_BOOTSTRAP=true
make[1]: Entering directory `/var/tmp/pkgbuild-0/erlang/sparcv9/erlang-otp-73b4221/lib'
make[2]: Entering directory `/var/tmp/pkgbuild-0/erlang/sparcv9/erlang-otp-73b4221/lib/hipe'
=== Entering application hipe
make[3]: Entering directory `/var/tmp/pkgbuild-0/erlang/sparcv9/erlang-otp-73b4221/lib/hipe/misc'
erlc -W  +debug_info +warn_exported_vars +warn_missing_spec +warn_untyped_record -o../ebin hipe_consttab.erl
make[3]: *** [../ebin/hipe_consttab.beam] Bus Error (core dumped)
make[3]: Leaving directory `/var/tmp/pkgbuild-0/erlang/sparcv9/erlang-otp-73b4221/lib/hipe/misc'

为什么这样,我该怎么做才能完成我的Erlang构建?

1 个答案:

答案 0 :(得分:4)

构建失败的原因是构建环境破坏。

在这种特定情况下,正在使用Sun GCC构建。编译这个特定版本的GCC是为了使用GNU汇编程序和Sun链接程序的混合。

Sparc平台对代码的对齐非常敏感,如果执行未对齐的代码,它将出错(例如,出现总线错误)。

在Sparc Solaris 10上构建的库存GCC使用的GNU汇编程序不能很好地自动对齐编译器生成的函数,从而导致未对齐的代码。

解决方案是构建自己的GCC并确保使用系统汇编程序和链接器;您可以通过使用GCC配置脚本的以下选项来实现此目的:

  --with-as=/usr/ccs/bin/as \
  --without-gnu-as \
  --without-gnu-ld \
  --with-ld=/usr/ccs/bin/ld \

生成的GCC构建将生成正确对齐的代码,并允许您成功构建Erlang。