minigui成功移植到ubuntu64位平台

1.pc系统ubuntu14LTS 64bit,同时在32位ubuntu16.04上经过了测试,官方的所有范例程序都能运行。

2.过两天会写份详细的移植教程,现在只是将移植好的文件上传到我的csdn下载,大家可以免费下载。

3.做个简单的移植过程说明:为了和32位兼容,后面做了一些改动,完全照做可能需要你动动脑筋,呵呵

编译时要注意:
第一:./configure --enable-pngsupport --enable-jpegsupport
第二:Makefile文件中加链接参数 -lpng -ljpeg

当然还有一些小问题,就不说了,如果还有疑问欢迎一起QQ交流:848416881

附上百度云盘下载地址: https://pan.baidu.com/s/1mhEGGvY

核心库编译错误:

Q1:object.h: In function 'MGGET_ARG_COUNT':
object.h:275: error: incompatible types when assigning to type 'va_list' from type 'struct __va_list_tag *'

分析:
va 作为函数参数的时候会转换成指针类型,而_va.va是数组类型   所以报类型不匹配错误。谷歌下就能解决
解决:
// _va.va = va;
va_copy(_va.va, va);

Q2;
/usr/bin/ld: CMakeFiles/gvfb.dir/gvfb_linux.o: undefined reference to symbol 'XkbGetIndicatorState'
//usr/lib/x86

gvfb/src/CMakeFiles/gvfb.dir目录下有一个link.txt文件
-lX11 -L/usr/lib/x86_64-linux-gnu/libXtst.a  -L/usr/lib/x86_64-linux-gnu/libX11.a

Q3:
start-qvfb :/usr/local/bin/gvfb pcxvfb 29490
XVFB-for-MiniGUI-3.0-(Gtk-Version) 800×600-16bpp Aborted (core dumped)

将HDC定义改为 typedef unsigned long HDC;  64位要用unsigned long表示指针。

Q4:
KERNEL>InitGUI: Count not init mouse cursor!
KERNEL>InitGUI: Init failure, please check your MiniGUI configuration or resource.

解决:
Uint16 MGUI_ReadLE16FP (FILE *src)
{
Uint16 value;

fread (&value, (sizeof value), 1, src);
return(ArchSwapLE16(value));
}
在src/misc/endianrw.c中该函数处添加大小端判断代码。其实LE就是表示该函数是用来处理小端数据的。先这样吧,后面还会有这个问题
反正知道是大小端问题

int checkSystem(void)
{
    union check
    {
        int i;
        char ch;
    }c;
    c.i = 1;
    return (c.ch==1);
}

Uint16 MGUI_ReadLE16FP (FILE *src)
{
        Uint16 value;


        fread (&value, (sizeof value), 1, src);
        if(1==checkSystem())
             return value;
        else
             return(ArchSwapLE16(value));
}

同时发现解析位图的时候,有误。DWORD在32bit cpu中是32位  而64位机器中是64位
#ifndef _HAVE_TYPE_DWORD
typedef unsigned long   DWORD;
#endif

将cursor.c文件中的位图加载函数LoadCursorFromFile中的DWORD改成4。位图如何解析百度上有很详细的介绍。

Q:5
get_image_type: unknown type png.
get_image_type: unknown type png.
get_image_type: unknown type png.
get_image_type: unknown type png.
get_image_type: unknown type png.
420    splash_draw_framework(); 

跟踪代码发现,这里应该要显示飞漫的启动动画的。 配置png支持的宏没有打开,最好先编译安装飞漫官方的png库, _MGIMAGE_PNG, 重新编译核心库gpl,
./configure --enable-pngsupport  这里其实jpeg库也没支持,先不管,用到再说,这时候编译same会出错,因为Makefile中
没有添加png的链接,Makefile中添加  LIBS += -lpng
这时候重新编译核心库,gvfb库和same程序,gdb调试发现飞漫启动画面运行了。

KERNEL>InitGUI: Initialization of LF Manager failure!

MGUI_ReadLE16、MGUI_ReadLE32(MGUI_ReadLE16FP)函数没进行大小端判断,添加判断即可,也就是小端直接返回value。

紧接着  在发生段错误
PGCRINFO kernel_GetGCRgnInfo (HWND hWnd)
{
    return ((PMAINWIN)hWnd)->pGCRInfo;
},
我们是64位机器,当然不行。
typedef unsigned long HWND;

段错误
PGCRINFO kernel_GetGCRgnInfo (HWND hWnd)
{
    return ((PMAINWIN)hWnd)->pGCRInfo;
},
我们是64位机器,当然不行。
typedef unsigned long HWND;

Program received signal SIGSEGV, Segmentation fault.
__memcpy_sse2_unaligned ()
    at ../sysdeps/x86_64/multiarch/memcpy-sse2-unaligned.S:157
157 ../sysdeps/x86_64/multiarch/memcpy-sse2-unaligned.S: No such file or directory.

(gdb) bt
#0  __memcpy_sse2_unaligned ()

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值