Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15498389
  • 博文数量: 2005
  • 博客积分: 11986
  • 博客等级: 上将
  • 技术积分: 22535
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-17 13:56
文章分类

全部博文(2005)

文章存档

2014年(2)

2013年(2)

2012年(16)

2011年(66)

2010年(368)

2009年(743)

2008年(491)

2007年(317)

分类: LINUX

2009-06-17 08:58:02

1.安装minigui开发中使用到的库
luther@gliethttp:~$ sudo apt-get install libpng12-dev libjpeg62-dev libqt3-mt

2.释放下载下来的minigui_3.0.1源码到相应目录
luther@gliethttp:/vobs/minigui/minigui_3.0.1$ sudo tar zxvf minigui_include.tar.gz -C /usr/local/include/
luther@gliethttp:/vobs/minigui/minigui_3.0.1$ sudo tar zxvf minigui_lib.tar.gz -C /usr/local/lib/
luther@gliethttp:/vobs/minigui/minigui_3.0.1$ sudo cp qvfb2 /usr/local/bin/

3.解压编译实例源码
luther@gliethttp:/vobs/minigui/minigui_3.0.1$ tar zxvf mg-samples-3.0.1.tar.gz
luther@gliethttp:/vobs/minigui/minigui_3.0.1/mg-samples-3.0.1$ ./configure
luther@gliethttp:/vobs/minigui/minigui_3.0.1/mg-samples-3.0.1$ make

4.编译成功后运行实例
luther@gliethttp:/vobs/minigui/minigui_3.0.1/mg-samples-3.0.1/mginit$ ./mginit &
./mginit: error while loading shared libraries: libminigui_procs-3.0.so.1: cannot open shared object file: No such file or directory
明显是因为找不到库路径,那么强行指定库路径.
luther@gliethttp:/vobs/minigui/minigui_3.0.1/mg-samples-3.0.1/src$ export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH
或者添加库搜诉路径
sudo vim /etc/ld.so.conf
追加:include /usr/local/lib
然后使用如下命令刷新
sudo ldconfig
luther@gliethttp:/vobs/minigui/minigui_3.0.1/mg-samples-3.0.1/mginit$ ./mginit 启动后界面效果图如下:
来运行一个实例
luther@gliethttp:/vobs/minigui/minigui_3.0.1/mg-samples-3.0.1/src$ ./trackbar
New comming in client:
New client joined layer: (mginit, trackbar)

效果图如下:
5.对于单独编译一个.c文件,可以使用如下命令:
luther@gliethttp:/vobs/minigui/minigui_3.0.1/mg-samples-3.0.1/src$ gcc -o trackbar trackbar.c  -lpng -ljpeg -lminigui_procs

PS:minigui的InitGUI()库函数存在bug,对于非法关闭qvfb2,比如:直接关闭terminal,
这样/var/tmp/mginit锁文件将不能释放,所以下一次将因为锁文件mginit存在而提示:
KERNEL>InitGUI (step 3): There is already an instance of 'mginit'!
如果在qvfb2打开时直接将通过命令行运行mginit的terminal关闭,那么再次启动mginit时就会提示:
KERNEL>InitGUI (step 3): There is already an instance of 'mginit'!
我们手工将/var/tmp/mginit锁文件删除,继续执行./mginit,提示另外一个错误:
KERNEL>LoadSharedResource: File exists
KERNEL>InitGUI (step 8): Can not load shared resource!
Segmentation fault
表示InitGUI()库函数发现创建的共享内存和共享信号量仍然存在,而不能创建,导致如上错误提示,从逻辑上来看,首先InitGUI()库函数先检查/var/tmp/mginit锁文件是否存在,如果不存在,那么说明没有mginit存在,所以如果再次创建共享内存和共享信号量失败,那么说明发生了上面关闭terminal的情况(或者手工被删除),应该清除先前创建的共享内存和共享信号量,既然InitGUI()库函数没有这么做,那么只能由我们用户自己做了,有2中解决方法:
1.手工删除/var/tmp/mginit
luther@gliethttp:~$ rm /var/tmp/mginit
2.重启pc或者使用下面介绍的shell脚本直接删除.
接下来重启电脑或者执行下面释放滞留下来的共享内存和滞留下来的共享信号量操作:)
luther@gliethttp:~$ ipcs -m|awk '{if(NF>=6 && $7=="")printf "-m %s\n",$2}'|xargs sudo ipcrm
luther@gliethttp:~$ ipcs -s|awk '{if($5==1)printf "-s %s\n",$2}'|xargs sudo ipcrm
然后使用
luther@gliethttp:~$ ipcs -s -t 查看一下时间,将刚才启动程序对于的时间对应的sem删除掉进即可
luther@gliethttp:/var/tmp$ ipcs -s -t

------ Semaphore Operation/Change Times --------
semid    owner      last-op                    last-changed             
950273   luther      Thu Jun 18 13:30:41 2009   Thu Jun 18 13:30:38 2009 
983042   luther      Thu Jun 18 13:30:41 2009   Thu Jun 18 13:30:38 2009 
所以还需要删除这2个Semaphore
luther@gliethttp:~$ ipcrm -s 950273
luther@gliethttp:~$ ipcrm -s 983042
这样qvfb2就可以正常启动了[luther.gliethttp]:)

PS2:
发现qvfb2创建1个共享内存和3个共享信号量
uther@gliethttp:~$ ipcs
------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status

0x00002f27 8159271    luther    666        1572936    0

------ Semaphore Arrays --------
key        semid      owner      perms      nsems    
0x00002eda 2031616    luther    666        1        
0x464d4702 2064385    luther    666        4        
0x464d4703 2097154    luther    666        64 

阅读(6026) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~