miniGUI编译详细过程以及示例
miniGUI
- miniGUI下載
- 編譯過程
由于最近項目遇到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
然后 make 再make install
3.編譯jpeg-7
進去后 prefix=$PWD/../build CC=arm-linux-gcc --host=arm-linux- --enable-static
然后 make 再make install 4.編譯libpng-1.2.37進去后prefix=PWD/../buildCC=arm?linux?gcc??host=arm?linux???enable?static‘然后‘make‘再‘makeinstall5.編譯‘minigui?res?be?3.0.12‘進去后‘prefix=PWD/../build CC=arm-linux-gcc --host=arm-linux- --enable-static` 然后 `make` 再`make install 5.編譯`minigui-res-be-3.0.12` 進去后 `prefix=PWD/../buildCC=arm?linux?gcc??host=arm?linux???enable?static‘然后‘make‘再‘makeinstall5.編譯‘minigui?res?be?3.0.12‘進去后‘prefix=PWD/…/build CC=arm-linux-gcc --host=arm-linux- --enable-static然后make再make 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_PROCESSESJoinLayer(NAME_DEF_LAYER, "helloworld", 0, 0); #endifCreateInfo.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> #endifmake如下:
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.cOBJS := \$(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 *.orm -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了。
總結
以上是生活随笔為你收集整理的miniGUI编译详细过程以及示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信支付的系统架构到底有多厉害?
- 下一篇: 小助手一蓝牙智能防丢器