編譯時間為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.
看到如下的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。