有 關cross compile flnx, INSTALL file section b 有特別說明cross compile的procedure,重點就是在設定compile tool 變數,為了方便,可以先寫出下面的shell script(setcrosstool.sh) :
export AR=arm-elf-ar先run 這一個script :
export AS=arm-elf-as
export CC=arm-elf-gcc
export CXX=arm-elf-c++
export GXX=arm-elf-g++
export LD=arm-elf-ld
export NM=arm-elf-nm
export RANLIB=arm-elf-ranlib
export STRIP=arm-elf-strip
$ source setcrosstool.sh再run configure,因為使用uClibc,沒有支援STL,STL使用STLport-4.5.3。要將STLport的include path加到CXXFLAGS中。 這個動作沒辦法在config時指定,所以要部份作:
confugre --- 修改makeinclude --- makeconfigure時可以 指定的是microwin 的src path(with-microwin)和安裝的path(prefix).
./configure --with-microwin=/home/charles/magsi/armutils_2.5.91.0/build_arm/microwin/src --prefix=/home/charles/sigma/libflnx --host=i686-pc-linux-gnu會產生makeinclude。
接著修改makeinclude: 在CXXFLAG中加入以下option
-Dlinux : 修正在LDLIBS和GLIBS都 加入以下options
-I/home/charles/magsi/armutils_2.5.91.0/build_arm/STLport-4.5.3/include : 修正"cannot find iostream.h"
-I/home/charles/magsi/armutils_2.5.91.0/build_arm/STLport-4.5.3/stlport : 修正 "cannot find stdlib.h"
-L/home/charles/sigma/libjpeg6b/lib :修正"cannot find -ljpeg"就可以開始make.
最先出現問題應該都是"unrecognizeable insn"問題,從error message中找到問題的function,找function的local variable中有沒有宣告size過大的array,把size改小。
接著會出現link 時發生resolved external : rint.
這是因為uClibc 的libm沒有加入s_rint.c這個module,修改uClibc/libm/Makefile,把s_rint.c加入source list中,rebuild uClibc.
還會發生一次"unrecognized insn" error,這次是new太多變數,因為test program,所以直接刪掉那些太多的button就可以。
flnx build OK!!
如果要測試test下的program,還要修改下test/Makefile,在 "cxx: " 的rule加上 -Wl,-elf2flt="-s32768" ,才會strip down成uClinux的flt 執行檔格式。
test program時,要記得先啟動nano-X
還沒install ---
$ make install查一下fluid/Makefile,這是因為install 使用x86的strip tool :strip,要修改為cross 的: arm-elf-strip.
strip: Unable to recognise the format of the input file fluid
OK.
但是還是不行,應該是要改 link command,加入elf2flt,轉換成flat binary file。
修改fluid/Makefile,在$(PROGRAM) : $(OBJ) 的build rule加上
-Wl,-elf2flt="-s32768"刪掉install :的rule中刪掉strip 這個command。
fluid,重新make。make install。(會有error,因為include和lib都已經有了,所以error是應該的)。
make install 後,會在install folder(這個例子是libflnx)下有bin, include, lib三個folder。
bin內是一個demo program。可以執行(好像是一個editor..)。