欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

miniGUI编译详细过程以及示例

程序员文章站 2022-05-30 14:17:51
...


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

miniGUI下载

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

编译过程

编译真的一波三折,简直吐血,如果你是一个想要学习GUI开发的学生党,那么真的不用搞这个玩意了,没必要折磨自己,直接学QT,还好找工作。项目需求的话,往下看。
miniGUI编译详细过程以及示例
文件下载完就上述这些东西,里面划线的不是必须资源,由于划线的资源安装需要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是指
miniGUI编译详细过程以及示例
--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=PWD/../buildCC=armlinuxgcchost=armlinuxenablestaticmakemakeinstall5.miniguiresbe3.0.12prefix=PWD/../build CC=arm-linux-gcc --host=arm-linux- --enable-static` 然后 `make` 再`make install 5.编译`minigui-res-be-3.0.12` 进去后 `prefix=PWD/…/build CC=arm-linux-gcc --host=arm-linux- --enable-static然后makemake install
6.编译zlib-1.2.2
这个稍微有点麻烦,反正我按照上面不可以,我改了他的Makefile 如下:
miniGUI编译详细过程以及示例
直接指定交叉编译器即可生成相应的库,libz.a 和zlib.h(搜索一下就找到了)
到这里已经成功了一半。
回到zlib上级目录你会发现多了一个build文件夹,这里面就是你要的东西,包括库文件,头文件,资源文件,和配置文件。
miniGUI编译详细过程以及示例
这些就是你要用到的东西

然后就是编译示例代码:

#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 aaa@qq.com $<

生成可执行文件。
然后把/build/etc下的MiniGUI.cfg改一下,分辨率啥的,
miniGUI编译详细过程以及示例
最后一步:
将build的bin下面的所有文件复制到板子的/bin
将build的etc下面的所有文件复制到板子的/etc
将build的lib下面的所有文件复制到板子的/lib
将build的include下面的所有文件复制到板子的/usr/local/include

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