miniGUI编译详细过程以及示例

4 篇文章 0 订阅
2 篇文章 0 订阅


由于最近项目遇到GUI开发,需要用到miniGUI来完成。为什么不用QT?我也一直在疑惑。可能因为跑不动吧。不管了,下面是整个miniGUI编译成功的过程。

miniGUI下载

首先,miniGUI下载的话,去官网相当麻烦,因为官网将先下载一个minigui的核心库,然后是让你运行sh脚本让你去下载的,git最近一直被墙,实在无奈。所以我千辛万苦找到了所有的依赖库和文件,方便直接编译。
资源就在我的csdn资源里面,自己跳转下载哦,因为是放到板子跑,用的是miniGUI-3.2-0.12版本

编译过程

编译真的一波三折,简直吐血,如果你是一个想要学习GUI开发的学生党,那么真的不用搞这个玩意了,没必要折磨自己,直接学QT,还好找工作。项目需求的话,往下看。
在这里插入图片描述
文件下载完就上述这些东西,里面划线的不是必须资源,由于划线的资源安装需要QT-3.0以上的组件,我板子能用QT我还用miniGUI干啥,所以划线的我不用,没安装,具体要用到的,可以百度一下,有详细教程的。
下面开始讲解编译过程:
首先声明一点:miniGUI是针对32位系统写的,如果你想直接在你的64位ubuntu上或者别的linux上跑,真的需要强大的代码能力,你需要改miniGUI的源码,自己移植。举个简单的例子,32为机器和64位机器的指针占字节数不一样就够你头疼的。所以,需要32为的编译器。我这里用的是32位的某厂家(机密)SOC,只要有交叉编译器都好说。

1.首先开始编译 libminigui-3.0.12-linux

cd libminigui-3.0.12-linux
./configure --prefix=$PWD/../build CC=arm-linux--gcc --host=arm-linux- --disable-pcxvfb   --enable-autoial   --enable-procs --enable-static    

上述代码中,CC后面跟你交叉编译器的名字,(是你自己的,不要按部就班),host按照我的格式, 后面的enable-procs是指
在这里插入图片描述
--enable-static是指生成静态库 如果你想要动态库,就直接--enable-share
然后回车,会自动配置makefile,有警告不用管,直接make就可以了 完了 make install
2.编译freetype-2.3.9-fm20100818
同样,切换进freetype-2.3.9-fm20100818目录下,然后./configure –prefix=$PWD/../build CC=arm-linux-gcc --host=arm-linux- --enable-static
然后 makemake install
3.编译jpeg-7
进去后 prefix=$PWD/../build CC=arm-linux-gcc --host=arm-linux- --enable-static
然后 makemake install 4.编译libpng-1.2.37进去后prefix= P W D / . . / b u i l d C C = a r m − l i n u x − g c c − − h o s t = a r m − l i n u x − − − e n a b l e − s t a t i c ‘ 然 后 ‘ m a k e ‘ 再 ‘ m a k e i n s t a l l 5. 编 译 ‘ m i n i g u i − r e s − b e − 3.0.12 ‘ 进 去 后 ‘ p r e f i x = PWD/../build CC=arm-linux-gcc --host=arm-linux- --enable-static` 然后 `make` 再`make install 5.编译`minigui-res-be-3.0.12` 进去后 `prefix= PWD/../buildCC=armlinuxgcchost=armlinuxenablestaticmakemakeinstall5.miniguiresbe3.0.12prefix=PWD/…/build CC=arm-linux-gcc --host=arm-linux- --enable-static然后makemake install
6.编译zlib-1.2.2
这个稍微有点麻烦,反正我按照上面不可以,我改了他的Makefile 如下:
在这里插入图片描述
直接指定交叉编译器即可生成相应的库,libz.a 和zlib.h(搜索一下就找到了)
到这里已经成功了一半。
回到zlib上级目录你会发现多了一个build文件夹,这里面就是你要的东西,包括库文件,头文件,资源文件,和配置文件。
在这里插入图片描述
这些就是你要用到的东西

然后就是编译示例代码:

#include <stdio.h>

#include <minigui/common.h>
#include <minigui/minigui.h>
#include <minigui/gdi.h>
#include <minigui/window.h>

static int HelloWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)
{
    HDC hdc;
    switch (message)
    {
    case MSG_PAINT:
        hdc = BeginPaint(hWnd);
        TextOut(hdc, 60, 60, "Hello world!");
        EndPaint(hWnd, hdc);
        return 0;

    case MSG_CLOSE:
        DestroyMainWindow(hWnd);
        PostQuitMessage(hWnd);
        return 0;
    }

    return DefaultMainWinProc(hWnd, message, wParam, lParam);
}

int MiniGUIMain(int argc, const char *argv[])
{
    MSG Msg;
    HWND hMainWnd;
    MAINWINCREATE CreateInfo;

#ifdef _MGRM_PROCESSES
    JoinLayer(NAME_DEF_LAYER, "helloworld", 0, 0);
#endif

    CreateInfo.dwStyle = WS_VISIBLE | WS_BORDER | WS_CAPTION;
    CreateInfo.dwExStyle = WS_EX_NONE;
    CreateInfo.spCaption = "HelloWorld";
    CreateInfo.hMenu = 0;
    CreateInfo.hCursor = GetSystemCursor(0);
    CreateInfo.hIcon = 0;
    CreateInfo.MainWindowProc = HelloWinProc;
    CreateInfo.lx = 0;
    CreateInfo.ty = 0;
    CreateInfo.rx = 240;
    CreateInfo.by = 180;
    CreateInfo.iBkColor = COLOR_lightwhite;
    CreateInfo.dwAddData = 0;
    CreateInfo.hHosting = HWND_DESKTOP;

    hMainWnd = CreateMainWindow(&CreateInfo);

    if (hMainWnd == HWND_INVALID)
        return -1;

    ShowWindow(hMainWnd, SW_SHOWNORMAL);

    while (GetMessage(&Msg, hMainWnd))
    {
        TranslateMessage(&Msg);
        DispatchMessage(&Msg);
    }

    MainWindowThreadCleanup(hMainWnd);

    return 0;
}

#ifndef _MGRM_PROCESSES
#include <minigui/dti.c>
#endif

make如下:

PRJ := minigui_init
CROSSCOMPILE := (你的交叉编译器)
 
CFLAGS 	:= -Wall -O2 -c
CFLAGS  +=  -I/data1/xxx/miniGUI/build/include(build的头文件路径)
 
LDFLAGS := -L/data1/xxx/miniGUI/build/lib  -lminigui_procs -ljpeg -lpng -ldl -lm -lpthread  (库路径)
 
CC 	:= $(CROSSCOMPILE)gcc
LD 	:= $(CROSSCOMPILE)ld
SRC = helloworld.c
 
OBJS := \
	$(patsubst %.c, %.o, $(filter %.c, $(SRC))) \
	$(patsubst %.cpp, %.o, $(filter %.cpp, $(SRC))) \
	$(patsubst %.s, %.o, $(filter %.s, $(SRC)))  
 
 
all: $(OBJS)
	$(CC) $(LDFLAGS) -o $(PRJ) $^
 
 
clean:
	rm -f *.o
	rm -f $(OBJS) $(PRJ)
%.o:%.c
	$(CC) $(CFLAGS) -o $@ $<

生成可执行文件。
然后把/build/etc下的MiniGUI.cfg改一下,分辨率啥的,
在这里插入图片描述
最后一步:
将build的bin下面的所有文件复制到板子的/bin
将build的etc下面的所有文件复制到板子的/etc
将build的lib下面的所有文件复制到板子的/lib
将build的include下面的所有文件复制到板子的/usr/local/include

或者,你可以直接把bulid放板子的某个路径,设置环境变量,在板子上就可以运行demo了。

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lobmo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值