http://www.armfans.net/thread-640-1-3.html
Minigui在PC端編譯和qvfb編譯
步驟一:裝載libminigui-1.3.3
linux:/home/work/minigui # cd libminigui-1.3.3/
linux:/home/work/minigui/libminigui-1.3.3 # make menuconfig
將“Font options”中的“Var bitmap font”選項去掉,否則報報下面錯誤一
linux:/home/work/minigui/libminigui-1.3.3 # make
linux:/home/work/minigui/libminigui-1.3.3 # make install
預設配置下將裝載到/usr/local/目錄下,可以在make menuconfig中修改“Development environment options”中的“Path prefix”來指定裝載目錄。如果使用其他目錄,則需要注意相關的目錄必須添加進環境PATH變數中,否則在編譯MiniGUI應用程式時會出現找不到包含檔案等錯誤資訊。
接着要執行ldconfig加載新生成的鏈結程式庫,否則將會出現類似找不到“libminigui-1.3.so.3”的錯誤訊息。
出錯記錄:::
(1)
varbitmap.c:248: error: static declaration of 'var_bitmap_font_ops' follows non-static declaration
具體錯誤如下:
source='varbitmap.c' object='varbitmap.lo' libtool=yes \
depfile='.deps/varbitmap.Plo' tmpdepfile='.deps/varbitmap.TPlo' \
depmode=gcc3 /bin/sh ../../depcomp \
/bin/sh ../../libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../include -I../include -g -O2 -D__MINIGUI_LIB__ -D_REENTRANT -O2 -Wall -Wstrict-prototypes -pipe -DNDEBUG -c -o varbitmap.lo `test -f 'varbitmap.c' || echo './'`varbitmap.c
rm -f .libs/varbitmap.lo
gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I../../include -I../include -g -O2 -D__MINIGUI_LIB__ -D_REENTRANT -O2 -Wall -Wstrict-prototypes -pipe -DNDEBUG -c varbitmap.c -MT varbitmap.lo -MD -MP -MF .deps/varbitmap.TPlo -fPIC -DPIC -o .libs/varbitmap.lo
varbitmap.c:248: error: static declaration of 'var_bitmap_font_ops' follows non-static declaration
varbitmap.h:38: error: previous declaration of 'var_bitmap_font_ops' was here
make[4]: *** [varbitmap.lo] 錯誤 1
make[4]: Leaving directory `/home/source/minigui/minigui1.3.x/libminigui-1.3.3/src/font'
make[3]: *** [all-recursive] 錯誤 1
make[3]: Leaving directory `/home/source/minigui/minigui1.3.x/libminigui-1.3.3/src/font'
make[2]: *** [all-recursive] 錯誤 1
make[2]: Leaving directory `/home/source/minigui/minigui1.3.x/libminigui-1.3.3/src'
make[1]: *** [all-recursive] 錯誤 1
make[1]: Leaving directory `/home/source/minigui/minigui1.3.x/libminigui-1.3.3'
make: *** [all] 錯誤 2
出錯原因:
在src/font/varbitmap.h中定義了extern FONTOPS var_bitmap_font_ops,那裡var_bitmap_font_ops為extern類別的,而在src/font/varbitmap.c中定義的是static類別,所以可能造成了編譯的出錯。
解決方法如下:(1)
修改src/font/varbitmap.c檔案:
//static FONTOPS var_bitmap_font_ops = {
extern FONTOPS var_bitmap_font_ops = { // wmmwang 修改
(2)
重新執行make menuconfig,將“Font options”中的“Var bitmap font”選項去掉即可:
│ │
•Raw bitmap font │ │
│ │ [ ] Var bitmap font │ │
│ │
•Incore font sansserif │ │
│ │
•Incore font courier │ │
│ │
•Incore font symbol │ │
│ │
•Incore font vgas │ │
│ │
•Qt Prerendered Font │ │
│ │
•TrueType font │ │
│ │
•Adobe Type1 font │ │
(2)
source='grid.c' object='grid.lo' libtool=yes \
depfile='.deps/grid.Plo' tmpdepfile='.deps/grid.TPlo' \
depmode=gcc3 /bin/sh ../../depcomp \
/bin/sh ../../libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I./ -I../include -I../../include -g -O2 -D__MINIGUI_LIB__ -D_REENTRANT -O2 -Wall -Wstrict-prototypes -pipe -DNDEBUG -c -o grid.lo `test -f 'grid.c' || echo './'`grid.c
rm -f .libs/grid.lo
gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I./ -I../include -I../../include -g -O2 -D__MINIGUI_LIB__ -D_REENTRANT -O2 -Wall -Wstrict-prototypes -pipe -DNDEBUG -c grid.c -MT grid.lo -MD -MP -MF .deps/grid.TPlo -fPIC -DPIC -o .libs/grid.lo
grid.c: In function 'AddCol':
grid.c:626: error: invalid lvalue in assignment
grid.c:627: error: invalid lvalue in assignment
grid.c:640: error: invalid lvalue in assignment
grid.c:641: error: invalid lvalue in assignment
grid.c:669: error: invalid lvalue in assignment
grid.c:670: error: invalid lvalue in assignment
grid.c:682: error: invalid lvalue in assignment
grid.c:683: error: invalid lvalue in assignment
grid.c: In function 'AddRow':
grid.c:735: error: invalid lvalue in assignment
grid.c:736: error: invalid lvalue in assignment
grid.c:747: error: invalid lvalue in assignment
grid.c:748: error: invalid lvalue in assignment
grid.c:776: error: invalid lvalue in assignment
grid.c:777: error: invalid lvalue in assignment
grid.c:790: error: invalid lvalue in assignment
grid.c:791: error: invalid lvalue in assignment
make[3]: *** [grid.lo] 錯誤 1
make[3]: Leaving directory `/home/source/minigui/minigui1.3.x/libminigui-1.3.3/ext/control'
make[2]: *** [all-recursive] 錯誤 1
make[2]: Leaving directory `/home/source/minigui/minigui1.3.x/libminigui-1.3.3/ext'
make[1]: *** [all-recursive] 錯誤 1
make[1]: Leaving directory `/home/source/minigui/minigui1.3.x/libminigui-1.3.3'
make: *** [all] 錯誤 2
出錯原因:
未知。可能是編譯器版本太高的緣故。
解決方法如下:
將上面出錯的grid.c檔案中對應行數的強制轉換去掉。例如grid.c:626、627行修改如下:
//(PGRIDCOLHDR)pCell1->pRowHdr = pRowHdr; // wmmwang 修改
//(PGRIDCOLHDR)pCell1->pColHdr = pCol1;
pCell1->pRowHdr = pRowHdr;
pCell1->pColHdr = pCol1;
其他出錯行同上修改。
步驟二:裝載裝載MiniGUI的資源包:
linux:/home/work/minigui/libminigui-1.3.3 # cd ../
linux:/home/work/minigui # cd minigui-res-1.3.3/
linux:/home/work/minigui/minigui-res-1.3.3 # make install
這一步一般不會出錯
步驟三:裝載mg-samples-1.3.1
linux:/home/work/minigui/qvfb-1.0 # cd ../mg-samples-1.3.1/
linux:/home/work/minigui/mg-samples-1.3.1 # ./configure
linux:/home/work/minigui/mg-samples-1.3.1 # make
linux:/home/work/minigui/mg-samples-1.3.1 # make install
出錯記錄:(3)
. /usr/local/lib/libminigui.so: undefined reference to `pthread_kill_other_threads_np'
原因:移除 MiniGUI 來源碼中呼叫'pthread_kill_other_threads_np'這個函數
的敘述。應該在 src/kernel/init.c 文件中,也可以執行 grep 找一下這個函數。
步驟四:裝載綜合例子mde-1.3.0
linux:/home/work/minigui/qvfb-1.0 # cd ../mde-1.3.0/
linux:/home/work/minigui/mde-1.3.0 # ./configure
linux:/home/work/minigui/mde-1.3.0 # make
linux:/home/work/minigui/mde-1.3.0 # make install
步驟五:裝載qvfb:
linux:/home/work/minigui # cd minigui-res-1.3.3/
linux:/home/work/minigui/minigui-res-1.3.3 # cd ../qvfb-1.0/
linux:/home/work/minigui/qvfb-1.0 # ./configure --with-qt-includes=/usr/lib/qt-3.3/include --with-qt-libraries=/usr/lib/qt-3.3/lib --with-qt-dir=/usr/lib/qt-3.3
(略過匯出資訊...)
linux:/home/work/minigui/qvfb-1.0 # make
(略過匯出資訊...)
linux:/home/work/minigui/qvfb-1.0 # make install
(略過匯出資訊...)
出錯記錄:(4)
在./configure時會報錯:
checking for libpng... -lpng -lz -lm
checking for libjpeg6b... no
checking for libjpeg... -ljpeg
checking for Qt... configure: error: Qt (>= Qt 3.0.3) (headers and libraries) not found. Please check your installation!
For more details about this problem, look at the end of config.log.
由于在fc7在預設是沒有完全裝載qt的,所以需要裝載一個軟體,這個可以通過你的虛擬機加載fedora7的鏡像檔案,然后在fedora7的cdrom中直接開啟得到,即光碟下的feodra檔案夾下的qt-devel-3.3.8-4.fc7.i386.rpm,點擊裝載
步驟六:minigui演示:
(1)進入/usr/local/etc/,將minigui.cfg修改為:
system]
# GAL engine
gal_engine=qvfb
# IAL engine
ial_engine=qvfb
mdev=/dev/mouse
mtype=IMPS2
[fbcon]
defaultmode=1024x768-16bpp
[qvfb]
defaultmode=640x480-16bpp
display=0
(2)進入/etc/ld.so.conf.d建一個minigui.conf,檔案的內容為/usr/local/lib
最后要把系統共用程式庫緩衝區清除,將libminigui加載上,可以使用指令
[root@fedora7]#ldconfig
否則在執行應用程式時會報如下錯:
./bomb
./bomb: error while loading shared libraries: libminigui-1.3.so.3: cannot open shared object file: No such file or directory
執行ldconfig後發現他是要 symbolic link 手動改一下吧
root@ubuntu:/mnt/hgfs/vm_disk/minigui/minigui-pda/minigui-pda# ldconfig
/sbin/ldconfig.real: /usr/local/lib/libminigui-1.3.so.3 is not a symbolic link
/sbin/ldconfig.real: /usr/local/lib/libvcongui-1.3.so.3 is not a symbolic link
/sbin/ldconfig.real: /usr/local/lib/libmgext-1.3.so.3 is not a symbolic link
(3)然后就可以使用qvfb體驗miniGUI了,進入qvfb1.0根目錄下的qvfb檔案夾,匯入下面指令:
[root@fedora7]# qvfb &
加上&象徵式使qvfb程式開啟后shell立即傳回,否則會阻塞shell程式,需要再開一個shell才可以執行minigui程式。qvfb執行起來后在qvfb中設定虛擬察看器解析度:File-->Configure,注意Size和Depth要設定的同MiniGUI.cfg中的解析度和色深一致。
(4)qvfb設定搞定后就可以執行mg-smaples-1.6.2/src中的例子了,執行一個helloworld試試效果
[root@localhost minigui-pc]# cd mde-1.3.0
[root@localhost mde-1.3.0]# cd bomb
[root@localhost bomb]# ./bomb
這時在qvfb介面上就出現了我們熟悉的掃雷畫面了,o(∩_∩)o...哈哈