本次SI工具需要將Linux相關(guān)模塊統(tǒng)一到windows下編譯,經(jīng)過調(diào)查,cygwin可以做到這一點(diǎn),但需要將gcc、as等編譯鏈接工具和glibc、libpthread等庫文件在cygwin環(huán)境下交叉編譯,使之可以在windows平臺(tái)做到如下兩點(diǎn):
生成Linux平臺(tái)上的可執(zhí)行文件(即生成ELF格式的可執(zhí)行文件,而不是windows平臺(tái)的PE格式)。
在ia32平臺(tái)上可以編譯出ia32平臺(tái)和ipf(ia64)平臺(tái)相應(yīng)的可執(zhí)行文件。
背景知識(shí):http://baike.baidu.com/view/650389.htm
Gcc項(xiàng)目本身編譯時(shí)即支持不同目標(biāo)平臺(tái),但是配置復(fù)制,一般生成有兩條途徑:
如果目標(biāo)平臺(tái)已經(jīng)有現(xiàn)成的編譯鏈接工具和庫文件,可以直接拷貝過來使用,但是要求生成目標(biāo)2進(jìn)制格式兼容,即兩者應(yīng)該是同一操作系統(tǒng)。實(shí)例:http://www.gelato.unsw.edu.au/IA64wiki/AlternateCrossCompilation2
重新編譯gcc、as等編譯鏈接工具和glibc、libpthread等庫文件使之支持目標(biāo)平臺(tái),為了簡化過程,使用工具crosstool(http://www.kegel.com/crosstool/)。
Crosstool支持很多平臺(tái),其中也包括cygwin,cygwin既可以做host平臺(tái)和build平臺(tái)也可以做target平臺(tái)。
操作系統(tǒng):Windows2003EE-JP-R2-SP2。
使用的cygwin版本為
使用的crosstool版本為0.43,放在cygwin環(huán)境下的/opt目錄下。
我們的Linux模塊目前主要編譯環(huán)境是RHEL3 Update8,其中的gcc版本為
使用demo-i686.sh可以啟動(dòng)相應(yīng)的編譯過程,但要做修改,修改處如下:
TARBALLS_DIR變更為/opt/downloads,為了簡便起見,將下載的模塊放在這個(gè)目錄。
GCC_LANGUAGES變更為”C”,因?yàn)樵诰幾gSTL庫的時(shí)候發(fā)生的錯(cuò)誤,目前還沒有找到對應(yīng)方法。所以把”C++”去掉,生成的編譯器只能編譯C語言源碼,不支持C++。
eval `cat i686.datgcc-
其他文件不用修改,在cygwin下執(zhí)行./demo-i686.sh就可以開始編譯過程,整個(gè)完成大概需要6小時(shí)左右。
生成的交叉編譯器會(huì)放在/opt/crosstool/gcc-
TARBALLS_DIR變更為/opt/downloads,為了簡便起見,將下載的模塊放在這個(gè)目錄。
GCC_LANGUAGES變更為”C”,因?yàn)樵诰幾gSTL庫的時(shí)候發(fā)生的錯(cuò)誤,目前還沒有找到對應(yīng)方法。所以把”C++”去掉,生成的編譯器只能編譯C語言源碼,不支持C++。
eval `cat ia64.datgcc-
ia64.dat的變更,把其中的TARTGET由ia64-unknown-linux-gnu變更為ia64-Linux。
具體解釋:http://www.kegel.com/crosstool/current/doc/crosstool-howto.html#cygwin
編譯過程中還有一處修改,在啟動(dòng)demo-ia64.sh之后,會(huì)逐個(gè)解壓上面提到的下載模塊,在解壓完glibc-
其他文件不用修改,整個(gè)編譯完成大概需要6小時(shí)左右。
生成的交叉編譯器會(huì)放在/opt/crosstool/go/ia64-linux/bin目錄下。
#!/bin/sh
/opt/crosstool/gcc-3.2.3-glibc-2.3.2/i686-unknown-linux-gnu/bin/i686-unknown-linux-gnu-gcc $*
生成之后就可以在命令行直接以gcc-linux-
然后修改我們Linux模塊相應(yīng)的makefile文件,將LD和CC兩個(gè)變量變?yōu)橄鄳?yīng)的剛才生產(chǎn)的腳本名,就可以按正常手順編譯模塊。
聯(lián)系客服