1. 說明本文檔適用於在SCO 5.0.6下編譯及使用gcc-3.0及gcc-3.0.x.同樣的方法也可用於編譯gcc-2.95.x、gcc-3.2.x、gcc-3.3.本文以gcc-3.0為例說明gcc的編譯過程和使用中的部分注意點。
2. 源碼的下載gcc-3.0的源碼可以從gcc的官方網站(gcc.gnu.org)及鏡像站點下載。
下載後將源碼包在SCO下解壓、解包。本文中假設解包後的目錄為/usr/test/gcc-3.0.
3. 編譯前准備3.1. 操作系統補丁在SCO OpenServer 5.0.6下編譯gcc-3.0不需要打操作系統補丁。如打了OSS646C後編譯過程有可能出錯。
3.2. 安裝GNU Make使用SCO開發環境自帶的make編譯gcc時會因為對Makefile中的某些語法無法解析而導致編譯失敗,因此需要以GNU Make來進行編譯。
首先,從GNU官方網站下載GNU Make的源碼(目前的最高版本是3.80),在SCO下編譯生成make執行碼,然後用此執行碼替換/bin/make.
4. 配置為了避免由於誤操作破壞gcc的源碼,一般將gcc的配置和編譯在另外的目錄下進行。
在/usr/test下創建gcctmp目錄。進入gcctmp目錄,執行以下命令:……/gcc-3.0/configure ——prefix=/usr/local/gcc-3.0 prefix所表示的是gcc的安裝目錄。在不使用此參數時,缺省的安裝目錄是/usr/local.如果可能安裝多個版本的gcc,最好將不同版本的gcc安裝至不同的目錄下。
configure還有許多其他的編譯選項,在配置前可以仔細閱讀一下INSTALL目錄下的文檔,根據需要打開或關閉某些選項。
5. 編譯在gcctmp下執行make bootstrap由於gcc系統比較龐大,編譯需要較長的時間。
6. 安裝在成功完成gcc的編譯後,用su命令切換至root用戶,執行make install將gcc安裝至/usr/local/gcc-3.0目錄下。
7. 安裝後的驗證將gcc的安裝路徑加入執行路徑:PATH=/usr/local/gcc-3.0/binPATH; eXPort PATH執行gcc -v,提示以下信息:Reading specs from /usr/local/gcc-3.0/lib/gcc-lib/i386-pc-sco3.2v5.0.6/3.0/specs Configured with: ……/gcc-3.0/configure ——prefix=/usr/local/gcc-3.0 Thread model: single gcc version 3.0就說明gcc已經編譯、安裝完成,可以用來進行程序的開發了。恭喜你!
8. -belf和-bcoff的兼容在SCO平台下編譯的程序有時需要使用elf或coff格式,這一功能是通過-belf和-bcoff編譯選項來控制的。
至遲從gcc-2.95.x起,在gcc官方文檔中都會有這樣一段關於SCO平台的聲明(詳見Host/Target specific installation notes for GCC):Unlike earlier versions of GCC, the ability to generate COFF with this target is no longer provided.因此,不要指望gcc能在SCO下生成coff格式的二進制碼。更糟的是gcc在SCO OpenServer下運行時如果加上-belf或-bcoff選項會報以下的錯誤:gcc: installation problem, cannot exec `cc1': No sUCh file or Directory並由此而導致一些軟件包的配置和編譯出錯。
網上有許多關於這方面的提問,但很少有人回答。其實解決的辦法很簡單:1. 以root用戶登錄,進入/usr/local/gcc-3.0/lib/gcc-lib 2. ln -s i386-pc-sco3.2v5.0.6 elf ln -s i386-pc-sco3.2v5.0.6 coff完成上面的操作後,就可以正常使用-b選項了。
當然,我們的目的不是為了生成elf格式或coff格式的二進制碼(在使用-belf和-bcoff時生成的代碼完全相同),而是在使用了-b選項時不至於出錯。
此方法也可用於gcc-2.95.x以及其它版本。