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 ()