Wez*_*ong 1 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'
Run Code Online (Sandbox Code Playgroud)
为什么会这样,我该怎么做才能完成我的 Erlang 构建?
构建失败的原因是构建环境损坏。
在这种特定情况下,正在使用 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 \
Run Code Online (Sandbox Code Playgroud)
生成的 GCC 构建将生成正确对齐的代码,并允许您成功构建 Erlang。