昨天把環境搭建好了,今天就開始編寫helloworld了。總體上很順利,但是還是出現了好幾個錯誤,感覺比作qt的時候順利多了,現在還對qt稀裡糊塗的。
照著實力程式我首先寫了這段代碼:
#include <stdio.h><br />#include <minigui/common.h><br />#include <minigui/minigui.h><br />#include <minigui/gdi.h><br />#include <minigui/window.h><br />static int HelloWinProc(HWND hWnd, int message, WPARAM wParam, LPARAM lParam)<br />{<br />HDC hdc;<br />switch(message){<br />case MSG_PAINT:<br />hdc = BeginPaint (hWnd);<br />TextOut (hdc, 60, 60, "Hello world!");<br />EndPaint (hWnd, hdc);<br />return 0;<br />case MSG_CLOSE:<br />DestroyMainWindow (hWnd);<br />PostQuitMessage(hWnd);<br />return 0;<br />}<br />return DefaultMainWinProc(hWnd,message,wParam, lParam);<br />}<br />int MiniGUIMain (int argc,const char* argv[])<br />{<br />MSG Msg;<br />HWND hMainWnd;<br />MAINWINCREATE CreateInfo;<br />#ifdef _MGRM_PROCESSES<br />JoinLayer(NAME_DEF_LAYER , "helloworld,it's bloodowolf's world;", 0 , 0);<br />#endif<br />CreateInfo.dwStyle = WS_VISIBLE | WS_BORDER | WS_CAPTION;<br />CreateInfo.dwExStyle = WS_EX_NONE;<br />CreateInfo.spCaption = "bloodwolf";<br />CreateInfo.hMenu = 0;<br />CreateInfo.hCursor = GetSystemCursor(0);<br />CreateInfo.hIcon = 0;<br />CreateInfo.MainWindowProc = HelloWinProc;<br />CreateInfo.lx = 0;<br />CreateInfo.ty = 0;<br />CreateInfo.rx = 240;<br />CreateInfo.by = 180;<br />CreateInfo.iBkColor = COLOR_lightwhite;<br />CreateInfo.dwAddData = 0;<br />CreateInfo.hHosting = HWND_DESKTOP;<br />hMainWnd = CreateMainWindow (&CreateInfo);<br />if (hMainWnd == HWND_INVALID)<br /> return -1;<br />ShowWindow (hMainWnd,SW_SHOWNORMAL);<br />while (GetMessage(&Msg, hMainWnd)) {<br />TranslateMessage (&Msg);<br />DispatchMessage(&Msg);<br />}<br />MainWindowThreadCleanup (hMainWnd);<br />return 0;<br />}<br />#ifndef _MGRM_PROCESSES<br />#include <minigui/dti.c><br />#endif
第一次編譯:gcc -o bloodwolf window.c -lminigui -ljpeg -lpng -lz
就拋出這麼多錯誤:
/usr/lib/gcc/i486-linux-gnu/4.4.1/../../../../lib/crt1.o: In function `_start':
/build/buildd/eglibc-2.10.1/csu/../sysdeps/i386/elf/start.S:115: undefined reference to `main'
/usr/local/lib/libminigui.so: undefined reference to `sem_init'
/usr/local/lib/libminigui.so: undefined reference to `pthread_key_create'
/usr/local/lib/libminigui.so: undefined reference to `sem_destroy'
/usr/local/lib/libminigui.so: undefined reference to `pthread_getspecific'
/usr/local/lib/libminigui.so: undefined reference to `pthread_create'
/usr/local/lib/libminigui.so: undefined reference to `pthread_cancel'
/usr/local/lib/libminigui.so: undefined reference to `pthread_key_delete'
/usr/local/lib/libminigui.so: undefined reference to `sem_post'
/usr/local/lib/libminigui.so: undefined reference to `sem_getvalue'
/usr/local/lib/libminigui.so: undefined reference to `pthread_setspecific'
/usr/local/lib/libminigui.so: undefined reference to `sem_wait'
/usr/local/lib/libminigui.so: undefined reference to `pthread_join'
collect2: ld returned 1 exit status
查了以下,似乎是沒加必要的編譯選項
gcc -o bloodwolf window.c -lminigui -ljpeg -lpng -lz -lminigui -lmgext -lpthread
這樣就可以了。不過還有個錯誤
/usr/lib/gcc/i486-linux-gnu/4.4.1/../../../../lib/crt1.o: In function `_start':
/build/buildd/eglibc-2.10.1/csu/../sysdeps/i386/elf/start.S:115: undefined reference to `main'
意思是未定義的main函數,進入點有問題,估計會是在int MiniGuiMain (int argc,const char* argv[])這裡出問題,看了半天,原來是這樣的
int MiniGUIMain (int argc,const char* argv[])。唉,終於告捷了,啟動qvfb,裡面出現了自己的第一個框框。