MINIGUI常见错误集及解决方法

来源:互联网 发布:淘宝添加客服的代码 编辑:程序博客网 时间:2024/05/02 02:11

MINIGUI常见错误集及解决方法

 

个人前言:其中错误1到16是直接转载的一篇博客,在移植MiniGUI过程中碰到的问题远远不止这些,我只是拿这16个先开个头,以后会将我自己在移植MiniGUI的过程中碰到的问题逐一附上。

 

 


 

网上摘抄的版本一:
1:一般网上都是说动态编译MiniGUI,然后把编译好的可执行文件和 MiniGUI的库,资源文件和配置文件拷贝到linux的根文件系统,但是如果是这样必然还要拷贝ld.so和lib.c.so,后者相当大,好象不太可行.我就想看看静态编译一个应用程序如何,但是出错(动态编译这个应用程序是对了的,libminigui是事先编好了的,有*.so和*.a),它报了一些数学的库函数未解析,如sqrt等,而且是libminigui.a报的,不太明白.我想有高手静态编译过吗,帮忙解决一下.多谢!!

问题找到了。
原来是在静态编译的时候没有指定lm 所以数学函数库才找不到.
arm-linux-gcc -o -static -lminigui -lpthread -lm -I /~~~/include -L /~~~/lib
肯定成功.

2:
[root@localhost bomb]# ls
bomb bomb.c bomb.o Makefile Makefile.am Makefile.in res
[root@localhost bomb]# ./bomb
AttachSharedResource: No such file or directory
Error in step 7: Can not attach shared resource!
InitGUI failure when using /usr/local/etc/MiniGUI.cfg as cfg file.
请问这是怎么回事情?谢谢


你运行的进程版的客户端程序,需要在之前运行一服务器程序mginit。

3:
交叉编译的时候,设置项build=i686-pc-linux-gnu target=ppc-linux host=i386-linux这是手册上说的 但是也有人说build=target=ppc-linux host=i686-pc-linux-gnu ,这两种有什么区别呀?哪一种对?

去网站下载资料看一下,根据开发板/系统的不同,配置也不尽相同

4:
我在皮肤窗口中要用多MiniGUI控件-进度条,在设定进度条的位置时,用到SendMessage函数是,第一个参数HWND,我理解应该是进度条控件的句柄,在皮肤窗口中用什么函数可以得到这个句柄?请指教!谢谢!

皮肤元素稍微特殊一点,需要用特定的函数来获取
HWND skin_get_control_hwnd (skin_head_t* skin,int id);
可以通过皮肤元素的id来获取其所窗口句柄

5:
请问libminigui-str-1.6.2如何交叉编译?我已正常在PC上安装了libminigui-str-1.6.2,并且成功编译了mde- 1.6.0,通过qvfb在PC机可以运行了.现在我想移栽到ARM,看资料说要交叉编译libminigui-str-1.6.2,并安装,可我试过不成功.是如何交叉编译libminigui-str-1.6.2?有比较好的资料介绍吗?

小罗自己回答:没有交叉编译安装。

6:
minigui的newgal是否支持翻转屏。

支持,但仅在增值版中支持;我看过V 1.6.8的说明文档,不明白要如何配置;我想要翻转屏,可用./configure --enable-coortrans_cw 只有触摸屏转过来,LCD没转

7:
如何为主界面添加背景图片?!急,先谢了!

使用这几个函示即可完成。
hdc=BeginPaint(hwnd);
LoadBitmap (hdc, &bitmap, "xxx.jpg");
FillBoxWithBitmap (hdc, 0, 0, 200, 200, &bitmap);
UnloadBitmap(&bitmap);
EndPaint(hwnd,hdc);

8:
为什么MiniGUI源码中许多函数前都有GUIAPI?例如:
void GUIAPI SetAutoRepeatMessage (HWND hwnd, int msg, WPARAM wParam, LPARAM lParam)
在头文件common.h中,对GUIAPI的定义是
#define GUIAPI
这表示什么意思,指返回类型,还是表示可被上层应用程序调用的函数?
请高手们指教,多谢:

定义调用方式而已,比如,编译MINIGUI库的时候,如果是采用windows下的DLL方式,则定义GUIAPI __declspec(dllexport),而编译应用程序的时候,定义GUIAPI 为__declspec(dllimport)就可以了。

9:
我按照xiaocong给的步骤修改了
还是不行,现在qvfb也大不开,下边是报错信息:
QSettings: failed to open file '/usr/lib/qt-3.1/etc/settings/qt_plugins_3.1rc'
Cannot open mouse pipe
我编译程序的时候报错如下:
GDI: Error in loading vbf fonts!
GDI: Can not initialize var bitmap fonts!
DESKTOP: Initialization of GDI failure!
InitGUI failure when using /usr/local/etc/MiniGUI.cfg as cfg file.
有知道是怎么回事的麻烦给我解释下,谢谢.

小罗自己回答:Minicom.cfg 配置不对。

10:
error while loading shared libraries: libminigui-1.6.so.8: cannot open shared object file: No such file or directory
是怎么回事?

小罗自己回答:ld.so.conf 没有加入 /usr/local/lib;或者没有运行 ldconfig;这是必须的。更新库的链接。

11:
请大家帮个忙,好吗?
我在ARM92410上运行mginit出现如下:
loadSharedResource: No Such file or directory
error in step8:can not load shared resourc

先把mginit运行起来!

12:
在PC上安装MiniGUI-STR V1.6.2时libminigui和minigui的资源时都没出现错误
但make应用程序例子时出现下面错误
helloworld.c:21:31: minigui/mywindows.h: 没有那个文件或目录
make[1]: *** [helloworld.o] 错误
make[1]: Leaving directory `/root/mg-samples-str-1.6.2-host/src'
make: *** [install-recursive] 错误 1

第一个问题:你打开helloworld.c文件,把#<mywindows.h>这句注释掉,在编译

13:
刚开始学minigui,配置了1.3的环境,mde运行正常。写了一个hello.c,
gcc -o hello hello.c -lpthread -lminigui -ljped -lpng -lz -lttf
运行后,
‘HWND-DESKTOP’ undeclared;
'MB_OK'undecared
哪位指点下怎么修改?

这两个变量没有定义,HWND-DESKTOP 'MB_OK',
#define HWND-DESKTOP 150
#define MB_OK 160

14:
错误信息如下:
./mginit: error while loading shared libraries: cannot open shared object file: cannot load shared object file: No such file or directory
解决办法:/usr/lib/目录下面没有对应的库文件,或者就是没有/usr/lib/这个目录,在/usr/目录下面建立lib/目录,然后拷入对应的库文件,就可以解决这个问题。

15:
EWGAL: Does not find matched engine: fbcon.
GDI: Can not get graphics engine information!
InitGUI failure when using /usr/local/etc/MiniGUI.cfg as cfg file.
修改libminigui-1.3.3/src/newgal/fbcon下的fbvideo.c
将/dev/fb0修改成/dev/fb/0
一共有两处

16:
如果启动时提示init错误,可以考虑给lilo传递init参数:init=/bin/sh rw3.如果miniGUI启动错误,考虑可能是以下原因:A)没有启动framebuffer,即lilo.conf 中的vga=XXXX,显示模式参照表如下:640x480 800x600 1024x768 1280x1024256 0x3010x3030x3050x30732k 0x3100x3130x3160x31964k 0x3110x3140x3170x31A16M 0x3120x3150x3180x31BB)启动了framebuffer,但无fb 设备文件,可以自己创建/dev/fb0文件:mknod fb0 c 29 0C)miniGUI需要/var/tmp目录,如果不存在也会导致错误;hMainWnd = CreateMainWindow (&CreateInfo)

17:
在执行 ldconfig -r /opt/rootfs //配置根文件
后出现如下提示:
[root@dejunweb /]# ldconfig -r /opt/rootfs
ldconfig: /lib/libminigui-1.6.so.9 is not a symbolic link
ldconfig: /lib/libmgext-1.6.so.9 is not a symbolic link
ldconfig: /lib/libvcongui-1.6.so.9 is not a symbolic link

之后你会在 /opt/rootfs/etc/[ld.so.cache ld.so.conf]

 

Can not attach shared resource


Hi,

I downloaded The MiniGUI V2.0.3 Development Package, installed the rpm. When i try to run one of the examples of the example package the following error occurs:

AttachSharedResource: No such file or directory
Error in step 8: Can not attach shared resource!

I try to run the examples from a fbdeb enabled console with these environment settings:

export gal_engine=fbcon
export defaultmode=800x600-16bpp
export ial_engine=console
export mdev=/dev/mouse
export mtype=IMPS2

I have no idea of what 's going on. Any help is appreciated.


Regards,

answer:
The dev package configured MiniGUI as MiniGUI-Processes. You should run mginit first. Mginit is the server of MiniGUI-Processes. Once mginit started, you can start other client programs.

 

 


网上摘抄的版本2(大漠孤狼移植MiniGUI1.3.3版本):

一些常见的问题

这几天遇到不一些问题,发现论坛上也基本上没人回答我,所以只好自己解决了,这里把一些问题写出来,方便有需要的人:

问题1:在板子上跑的程序都显示 can not find qvfb … 之类,可是我只是想让它在板子上跑在 FrameBuffer 之上啊?

解决:在编译 libminigui 的时候,把
[ ] Use incore (built-in) resource //建议不要选这个,老有问题
[ ] NEWGAL engine on Qt Virtual FrameBuffer //建议不要选这个,不然老让你用qvfb


问题2:编译的时候老出现 unreferenced to vbf_Courier8x8() 之类的问题

解决:
[ ] Var bitmap font //千万不要选这个,不然会出现 unreferenced vfb_Courier8x8() 之类的错误


问题3:一切都搞定了,可是执行 mginit() 的时候就崩溃了,把所有的寄存器值打印了出来,然后显示了个 Abort() 就退出了!

解决:
[ ] IME (GB2312) Intelligent Pinyin module //千万不要选这个,不然后面你的 mginit 程序一启动就崩溃了


问题4: 为什么我执行 helloword 就显示 “Can not attach shared resource!”

解决:
注意: 因为你的 minigui 是按 Lite 模式编译的,如果必须 mginit 首先运行起来,你其它的程序(比如 bomb ,或是 helloword)才能执行,如果 mginit 没有运行起来你就执行 helloword 的话,就会显示错误

“ Can not attach shared resource ! ”

问题5:怎么把自己的程序加到 minigui 的 taskbar 上去,并且排在前面??

解决:
查看 mginit 目录下的 mginit.rc 文件,里面就是配置,我想你能看明白的:)


问题6:为什么我的程序显示 can not find libminigui.so ??

解决:你是否忘了在 etc/ld.so.conf 中加入 /usr/local/lib ,并且执行 ldconfig 程序? 看前面说的方法


网上摘抄的版本3:

MiniGUI初始化一些问题以及解决办法。

按照以上的方法运行mginit的时候会出现一些问题,按照上面MiniGUI.cfg配置运行的话会出现:

问题1

[root@FriendlyARM mginit]# ./mginit

640x480 LCD

GAL ENGINE: Can't open /dev/tty0: No such file or directory

NEWGAL: Set video mode failure.

Error in step 3: Can not initialize graphics engine!

InitGUI failure when using /usr/local/etc/MiniGUI.cfg as cfg file.

解决方法:

#mknod /dev/tty0 c 4 0

 

这样在运行mginit的时候还会有错误,如下:

问题2

LoadSharedResource: No such file or directory

Error in step 7: Can not load shared resource!

InitGUI failure when using /usr/local/etc/MiniGUI.cfg as cfg file.

[root@FriendlyARM mginit]#

解决方法:

mkdir /var/tmp

这样就可以看到minigui初步界面了,如果强制退出的话,在下次运行mginit的话会出现下面的问题:

问题3

Error in step 3: There is already an instance of 'mginit'!

解决方法:

删除/var/tmp目录下的2minigui的文件。

 


自己在进行MiniGUI移植的时候所碰到的问题: 

首先是移植MiniGUI1.6.10到ARM平台(YLP2440开发板)上所碰到的问题

1: 新安装好的ubuntu9.10并不适合研究开发,需要装一些必需到依赖文件(具体见嵌入式软件开发及C语言实现-MiniGUI剖析一书的附录),否则在LINUX Pc上安装miniguiqvfb老出错.

2: 安装依赖库。

比较难安装的是jpegttfjpeg见前面所提到的第二篇参考文章,ttf需要全手动安装,见大漠孤狼文章。

3:参考大漠孤狼移植MiniGUI文章的时候的一些细节:

参考文章中提到要手动修改GCC,LD等,还建立软连接与备份等,事实证明在本次实验中并不需要,如libz,参考文章说不支持交叉编译,经我实验,本次用到到zlib1.2.3支持,所以关于文章中建立GCC的符号链接与备份可略去不看。

还有文章说minigui1.33在链接库时老链接/usr/lib下,这个1.6.10没有这个问题。

再有交叉编译minigui时,大漠孤狼文章中用的是1.33,支持图形化配置,1.6.10不支持图形化配置,只能用写脚本来配置。

4 :制作根文件系统。

看到好多参考文章上说,直接能把板子上的库,配置文件等考到相应的目录下,但是YLP2440开发板所提供的根文件系统是CRAMFS格式的,在烧到板子上之后不能对目录下的文件进行拷贝,移动,修改等操作。所以我不得不自己做一个根文件系统。

在做根文件系统中,重点是用busybox生成系统程序与系统初始化,系统程序是编译完busybox后自动生成的,而系统初始化需要自己来完成,主要是两个文件:inittabfstab.具体制作请参考嵌入式软件开发及C语言实现-MiniGUI剖析一书中2.7.4构建根文件系统一节。另外需要minigui应用程序所需要到链接库,Minigui 配置文件,Minigui资源文件, 其中Minigui 配置文件的IAL,GAL需根据实际板子来调。

5:制作根文件系统时,如果没有/etc/inittab /etc/fstab文件,即没有做系统初始化工作,则进不了根文件系统,老报以下错误:unable to open an initial console

6 : 如果出现以下错误:

NEWGAL:Does not found matched engine:fbcon

InitGUI:can not get graphics engines information

则应该在PC上交叉编译minigui之前在libminigui1.6.10/src/newgal/fbcon目录下修改fbvideo.c文件,将出现的/dev/fb0修改为/dev/fb/0(注:一共有两处需要修改)

至于修改的原因我认为是因为设备文件系统的问题,详情请见刘淼编的嵌入式系统接口设计与LINUX驱动程序开发一书中第二章2.4.317页关于devfs的一些问题。

7: 若出现NEWGAL>FBCON:can't open /dev/tty0 No such file or directory

NEWGAL:set video mode failure

InitGAL:cannot initialize graphics engine!

则在/etc/init.d/rcS中添加 /bin/ln -s /dev/vc/0   /dev/tty0即可

8: 如果minigui库和安装的依赖库在/usr/local/lib目录下,则一定要在ld.so.conf中加入了/usr/local/lib,并执行ldconfig -r /opt/rootfs.目的是让Minigui 应用程序找到所需要链接的库。

 

然后是将MiniGUI1.6.10移植到SPARC平台(gr-xc3s-1500即LEON3开发板):  

 

 

 

 

这个移植的非常顺利,原因如下:有贺明师兄移植成功的经验与日志可参考;贺明师兄移植时候交叉编译的各种库可以拿来直接用;LEON3的操作系统操作起来非常方便,它把bootloader,kernel,fs做到一起了,而且fs是initramfs,在将操作系统烧到板子上后,可以对目录下的文件进行各种操作(复制,移动,修改等),这样就免去了自己做根文件系统的麻烦;移植过程中,只需在MiniGUI.cfg文件中修改输入输出引擎即可,无须额外添加输入输出引擎了,方便的很;

 

碰到的问题:  

1:LEON板子NFS老是出问题,后来查出是LEON硬件配置的问题

2:LEON板子跑MiniGUI应用程序显示的界面不全,只有窗口框架与光标,无控件与菜单,后查出亦是LEON硬件配置的问题

3: LEON板子在unbuntu9.10上软件配置,make时,出现与sumvision文件有关的错误时,在sumvision.c文件中添加#include<limits.h>,即可编译通过

3:LEON板子软件配置后,出不来字符终端界面,后查出是在软件配置时,在VGA显示上将x写成*,系统不识别的缘故

4:出现relocation error:/lib/libpthread.so.0:symbol_errno, version GLIBC_2.0 not defined in file libc.so.6 with link time reference.

解决办法:建立libpthread.so向libpthread.so.0的符号链接,即ln -s ./libpthread.so.0 ./libpthread.so