1

(私はすでにこれに対する答えを持っています。私が学んだことを共有し、将来この問題を他の誰かを救うことができるように、私は自分の質問に答えるつもりです)

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ビルドを完了するために何ができますか?

4

1 に答える 1

5

ビルドが失敗する理由は、ビルド環境が壊れているためです。

この特定のケースでは、SunGCCビルドが使用されています。この特定のバージョンのGCCは、GNUアセンブラとSunリンカーを組み合わせて使用​​するようにコンパイルされています。

Sparcプラットフォームはコードのアライメントに非常に敏感であり、アライメントされていないコードが実行されると(たとえば、バスエラーで)障害が発生します。

Sparc Solaris 10のストックGCCビルドで使用されるGNUアセンブラは、コンパイラによって生成された関数を自動的に整列させるためにそれほどハードに動作しないため、コードが整列されません。

解決策は、独自のGCCを構築し、システムアセンブラーとリンカーを使用していることを確認することです。これは、GCCのconfigureスクリプトに次のオプションを使用することで実現できます。

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

結果として得られるGCCビルドは、適切にアラインされたコードを生成し、Erlangを正常にビルドできるようにします。

于 2011-07-03T04:51:48.437 に答える