[續] Porting FLTK on a embedded ARM platform
November 14, 2007 5:07 pm若不要FLNX,那可以選擇NXlib來銜接microwindows與FLTK。NXLib是microwindows作者Greg開發,可模擬X11的API界面,讓原本只能與X11共用的視窗套件也能搭配microwindows。目前最新的版本是0.45,解開後需要做以下設定︰
MWIN=/root/keypad/toolchain/arm/microwindow-0.91/src
X11=/usr/include
MWIN_INCLUDE=$(MWIN)/include
MWIN_LIB=$(MWIN)/lib
X11_LIB=$(X11)/lib
X11_INCLUDE=$(X11)
#INSTALL_DIR = $(X11_LIB)
NX_LIB=/usr/local/arm/3.4/lib
INSTALL_DIR = $(NX_LIB)
基本上把microwindows跟X11的include路徑設對,編譯的過程就不會有什麼問題。要留意的是library安裝目錄一定要錯開系統原本擺置libX11的地方,要避免的話可以修改nxlib生出來的library名稱,或者直接變換安裝路徑。由於是編譯在不同平台上,所以直接安裝到arm的目錄就好了(不要make install也無所謂啦),保留原來的檔名比較方便往後的使用。
根據microwindows網站上Greg的留言,他至少有拿NXLib測試FLTK 1.1.3是可以用的,根據我測試過幾個新的版本,就算是拿最新的1.1.7其實也沒問題。我用的configure option如下︰
./configure \
--host=arm-linux \
--prefix=/usr/local/arm/3.4 \
--with-x \
--x-includes=/usr/X11 \
--x-libraries=/usr/local/arm/3.4/lib
如果你用1.1.3以後的版本,在編譯測試程式的時候可能會出錯,像我遇到的就是編譯範例的過程需要呼叫fluid(FLTK)處理.fl檔,不過你編出來的fluid當然是沒辦法在x86平台執行,所以在這裡會停下來,但這不影響之前就做好的FLTK library﹔理論上可以修改Makefile改用x86版的fluid去做這些事,不過我懶,而且那些範例對我沒什麼作用,所以就讓那個錯誤一直掛在那裡了。
你可以從test目錄裡拿個簡單的程式來試試看,執行之前要先把之前做好的library跟server準備好︰
/bin/nano-X
/lib/libnano-X.so
/lib/libX11.so.6.2
ln -s libX11.so.6.2 libX11.so.6
先把nano-X丟在背景執行,螢幕會先被初使化,再執行FLTK的程式應該就可以看到畫面了。
Categories: 數位石器時代


19 個回應 to “[續] Porting FLTK on a embedded ARM platform”
我在編輯FLTK的時候發生了/opt/mipsel-linux-gcc-sdk-3.4.4/cross/lib/gcc/mipsel-linux/3.4.4/../../../../mipsel-linux/bin/ld: cannot find -lXext
這個情形似乎是連接不到Xext的資料庫,但是我找不到方法處理.可以請問您有發生這種情形過嗎? 可以請教要如何去排解呢?
Hi Will,
你可以把-lXext從Makefile裡面拿掉,不會有影響的。至少我是這麼處理…
Hi ykhuang,
我照著你的步驟交叉編輯FLTK時遇到一個奇怪的問題,我有試著去解決或網路搜尋資料但都無法克服,如果您有空就幫忙解答一下.
1.首先我交叉編輯完成NXLib-045產生所需要的libX11
2.在根據你的onfigure option交叉編輯FLTK,發生了這樣的error, ……/mipsel-linux/lib/libX11.so when searching for -lX11 , ……/mipsel-linux/bin/ld: cannot find -lX11
我對於這個問題的解答是經由交叉編輯完成NXLib-045的libX11不是FLTK所要的,這是讓我困擾的地方,我有試過使用一般編輯是正常的,但交叉編輯就有問題,不知道是否還有其他的地方需要作適當得修改??
Will,
從你的描述來看,可能要先釐清你nxlib編出來後把library安裝到哪個目錄了?你在做x86 gcc的編譯時,configure設定應該和mips的不一樣吧?不特別指定library路徑的話,gcc會去找/usr/lib,而你在做交叉編譯時,linker的搜尋路徑是否和你configure的設定相同?nxlib是不是也安裝在同一個路徑裡呢?
Hi ykhuang,
感謝您的說明,這個問題我已經解決.我犯了很基本的錯誤,在編輯NXlib-0.45時它預設變數CC=gcc,而我要做交叉編輯所以make時要鍵入 make CC=mipsel-linux-gcc,不然編輯出的lib不能夠被使用,再來我想請教一個偏題的問題,對於這個問題我也找不到明確的答案.
在大部分的文件說明中提到,microwiodows採用三層式架構設計,最下層負責與其它硬體driver作連接,設計時不要破壞這個結構.但是microwindows裡面的drivers只提到有針對滑鼠,鍵盤,螢幕做連接就沒有提到其他的硬體裝置了.我利用FLTK寫了一個圖形介面並且和開發板GPIO的driver做連接.我是直接在FLTK程式碼中使用system call訪問GPIO,而不是採用三層式架構設計,主要也是我不知道要怎麼跟microwiodows溝通,想請問板大是怎麼使用FLTK跟週邊裝置做溝通呢??
Will,
你的做法沒錯,我想你看的文件所寫的意思不要去破壞鍵盤滑鼠螢幕這些基本圖形UI的輸出入界面,至於其他硬體與microwindows並沒有直接關連,所以直接使用是沒問題的。我也是直接在FLTK的程式碼裡面控制buzzer,LED之類的周邊。
問個笨問題, microwindows跟directFB是不是在相同的level? 謝謝
smikid,
若單就GTK over DirectFB與FLTK over microwindows來看的話,算是在同一level吧,只不過FLTK並不是直接呼叫microwindows API。
hi ykhuang:
好不容易搞定了nano-X, 接著build NXLib也很順利, 但在FLTK時就遇到下面的問題
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/bin/ld: warning: libnano-X.so, needed by /usr/lib/libX11.so, not found (try using -rpath or -rpath-link)
/usr/lib/libX11.so: undefined reference to `GrGetScreenInfo’
/usr/lib/libX11.so: undefined reference to `GrSetGCGraphicsExposure’
.
.
.
看起來他是找不到libnano-X.so, 我這個檔跟libX11.so是放在一起的, 我在configure時按照你上面文章
所說的有指定NXLib所build出來的目錄, 我的libnzno-X.so該如何指定給他呢?
謝謝
smikid,
如果你是照我的設定下去編,nxlib與libnano-X應該會安裝在/usr/local/arm/3.4.1/lib底下吧?可是看你的錯誤訊息FLTK卻跑去連結/usr/lib/底下的libX11.so,這樣是錯誤的喔,你可能要再檢查一下你安裝的地方。
hi ykhuang:
我有改過prefix, 所以nxlib與libnano-X是在/usr/lib底下沒錯, 拍細沒說清楚!
smikid,
我又把舊的程式翻出來照作一次,我這邊並沒有出錯,libnano-X.so也是放在與libX11.so同一個目錄(/usr/local/arm/3.4/lib);編譯FLTK只需要指定X11的相關資源,他並不知道microwindow的存在。另外你可以看看是不是在編譯fluid的時候出錯,此時在lib/目錄下libfltk.a應該已經生出來可以拿來用了,fluid沒有編過其實沒啥影響,反正後面要去執行也一樣會停在那邊……
Hi ykhuang:
=== making fluid ===
Compiling CodeEditor.cxx…
Compiling Fl_Function_Type.cxx…
Compiling Fl_Group_Type.cxx…
Compiling Fl_Menu_Type.cxx…
Compiling Fl_Type.cxx…
Compiling Fl_Widget_Type.cxx…
Compiling Fl_Window_Type.cxx…
Compiling Fluid_Image.cxx…
Compiling about_panel.cxx…
Compiling align_widget.cxx…
Compiling alignment_panel.cxx…
Compiling code.cxx…
Compiling factory.cxx…
Compiling file.cxx…
Compiling fluid.cxx…
Compiling function_panel.cxx…
Compiling template_panel.cxx…
Compiling undo.cxx…
Compiling widget_panel.cxx…
Linking fluid…
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/../../../../arm-linux/bin/ld: warning: libnano-X.so, needed by /usr/lib/libX11.so, not found (try using -rpath or -rpath-link)
我是這裡出現錯誤, 此時libfltk.a已經生出來了, 所以我可以不用去管這個錯誤囉?
hi ykhuang:
上面的錯誤我加了-lnano-X之後就解了, 不過我如果在build micorwindows 時設
LINK_APP_INTO_SERVER=Y, libX11.so就會有3個function沒有define, 設成N時
就沒有這個問題, 是否FLTK+nxlib+nano-X只有支援client-server的方式運作呢?
smikid,
因為FLTK+microwindow是三層架構,把程式跟server建在一起可能會有點難度。我之前也覺得要另外跑nano-X很討厭,曾經把LINK_APP_INTO_SERVER打開,但過程有出現錯誤,我想若真的不想要執行server,FLTK跟nxlib,nano-X都必須完全以static方式做連結才有可能,不過接下來我就沒繼續嚐試了。
我建議你先把LINK_APP_INTO_SERVER關掉,然後從頭做一次。
想請問一下,因為我將fltk跑在micorwin上面之後
卻發現我用keyboard輸入的和畫面跑出來的結果完全不同
請問您有遇過這樣的問題嗎?
想請問一下,因為我將fltk跑在micorwin上面之後
卻發現我用keyboard輸入的和畫面跑出來的結果完全不同
請問您有遇過這樣的問題嗎?我在Ubuntu 8.04下面工作的
hi septemhill,
我沒在FLTK上啟用過keyboard,所以相關經驗就抱歉了,不過我建議你可以從microwindows的keyboard driver下手debug。
ok,謝謝您
我再試試看好了。
要留言乎?