2011-07-03 32 views
1

(我已經回答了這個問題;我要回答我自己的問題,以便我可以分享我學到的知識,並在將來爲別人節省這個麻煩)爲什麼我的erlang構建在Solaris Sparc上發生核心轉儲失敗?

當我嘗試構建Erlang在Solaris 10 SPARCV9,構建失敗,中途經過:

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' 

這是爲什麼,我能做些什麼來完成我的二郎建?

回答

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編譯生成會正確對齊的代碼,讓你成功打造二郎。