詳解 Ubuntu 10.10下 Qt 與 wxWidgets 編譯
Ubuntu 10.10下Qt與wxWidgets 編譯十本文介紹的內(nèi)容,不多說,下來看內(nèi)容。近期由于項目需要,要調(diào)研GUI庫,經(jīng)查閱資料,發(fā)現(xiàn)相對比較出色的就是Qt和wxWidgets這兩個了,因此這里選擇對二者安裝試用。源碼安裝的技巧和習慣可以參考我的文章Linux下源碼安裝的經(jīng)驗總結(jié)。
Qt的安裝比較方便,在官方網(wǎng)站上下載Qt Creator2.1.0(有.bin格式的二進制安裝包)和Qt-everywhere-opensource-src-4.7.3的源碼包,對于IDE,可以直接./*.bin,就會彈出安裝窗體,和Windows一樣安裝即可。完成后解壓縮源碼包tar vxf *.tar.gz即可,接下來輸入./configure,程序開始檢查安裝環(huán)境,如果提示缺少g++,請參見我的另一篇文章Ubuntu10.10下安裝gcc-4.5.3。
然后又會提示libX11未找到,這個比較麻煩,要裝蠻久的,在這里列出需要的東西,libX11-6.2.1、libXau-1.0.6、libXext-1.0.4、libXrender-0.9.4、libXtrans-0.1、renderproto-0.9.3、xextensions-1.0.1、xextproto-7.0.3、xproto-7.0.13以及xtrans-1.2.6,這些東西都可以在http://freedesktop.org/Software/xlibs這個網(wǎng)站上下載到,值得一提的是,在GTK+的安裝過程中,雖然已安裝libX11但仍提示libX11 not found的解決辦法就是安裝libXext,這個問題在安裝gtk時困擾了我好久,貼出來作為前車之鑒。
安裝X11的過程中,libX11的make時會出現(xiàn)一個錯誤提示XK_Ocaron或者是XK_Ccedillaabovedot等未定義,根據(jù)錯誤提示查看src下的KeyBond.c文件,出錯部分代碼如下:
- view plaincopy to clipboardprint?
- case 0x16: /* Caucasus, Inupiak, Guarani */
- if (sym == XK_ocaron || sym == XK_Ocaron) {
- *upper = XK_Ocaron;
- *lower = XK_ocaron;
- }
- else if (sym >= XK_Ccedillaabovedot && sym <= XK_Obarred)
- *lower += (XK_ccedillaabovedot - XK_Ccedillaabovedot);
- else if (sym >= XK_ccedillaabovedot && sym <= XK_obarred)
- *upper -= (XK_ccedillaabovedot - XK_Ccedillaabovedot);
- else if (sym == XK_schwa || sym == XK_SCHWA) {
- *lower = XK_schwa;
- *upper = XK_SCHWA;
- }
- else if (sym == XK_lbelowdot || sym == XK_Lbelowdot) {
- *lower = XK_lbelowdot;
- *upper = XK_Lbelowdot;
- }
- else if (sym == XK_lstrokebelowdot || sym == XK_Lstrokebelowdot) {
- *lower = XK_lstrokebelowdot;
- *upper = XK_Lstrokebelowdot;
- }
- else if (sym == XK_gtilde || sym == XK_Gtilde) {
- *lower = XK_gtilde;
- *upper = XK_Gtilde;
- }
- break;
- case 0x16: /* Caucasus, Inupiak, Guarani */
- if (sym == XK_ocaron || sym == XK_Ocaron) {
- *upper = XK_Ocaron;
- *lower = XK_ocaron;
- }
- else if (sym >= XK_Ccedillaabovedot && sym <= XK_Obarred)
- *lower += (XK_ccedillaabovedot - XK_Ccedillaabovedot);
- else if (sym >= XK_ccedillaabovedot && sym <= XK_obarred)
- *upper -= (XK_ccedillaabovedot - XK_Ccedillaabovedot);
- else if (sym == XK_schwa || sym == XK_SCHWA) {
- *lower = XK_schwa;
- *upper = XK_SCHWA;
- }
- else if (sym == XK_lbelowdot || sym == XK_Lbelowdot) {
- *lower = XK_lbelowdot;
- *upper = XK_Lbelowdot;
- }
- else if (sym == XK_lstrokebelowdot || sym == XK_Lstrokebelowdot) {
- *lower = XK_lstrokebelowdot;
- *upper = XK_Lstrokebelowdot;
- }
- else if (sym == XK_gtilde || sym == XK_Gtilde) {
- *lower = XK_gtilde;
- *upper = XK_Gtilde;
- }
- break;
對于這個不知道什么語言的鍵盤說明,可以直接將case下代碼全部/**/忽略掉,只留下個break,不會影響功能,修改后再編譯就可以成功了。另外,建議將這些庫文件全部安裝在/usr/X11R6目錄下,方便統(tǒng)一管理,統(tǒng)一使用,可以減少不少麻煩。
X11安裝完后,還會提示Cairo無法找到,誒,只好接著找咯!下載后安裝,如果有缺失提示就裝上,比較簡單,略過。全部安裝后,就可以正確的configure了,接下來的編譯過程需要3個小時左右,要做好心理準備。安裝完成后,在Qt Creator中設置qmake路徑,具體方法如圖:
然后就可以編寫個小程序試試啦,界面不錯,比較簡潔。計劃過段時間放出Qt與wxWidgets的對比評測,到時再詳細截圖。
有了Qt所依賴的這些庫,wxWidgets的安裝就不要什么東西了,在configure時加選項--with-x11就可以了。不過wxX11的成熟度還不夠,在我的虛擬機上編譯都是可以的,但是運行時居然沒有合適的顯卡驅(qū)動,界面是慘不忍睹?。?!運行dialog例程時,還有錯誤如下:
- X Error of failed request: BadWindow (invalid Window parameter)
- Major opcode of failed request: 10 (X_UnmapWindow)
- Resource id in failed request: 0x0
- Serial number of failed request: 388
- Current serial number in output stream: 389
經(jīng)過查閱資料,也是由于顯卡驅(qū)動沒裝的緣故。其實我是挺傾向于wxWidgets的,但是這樣的不成熟,我怎么用啊!相對來說,wxgtk則成熟了不少,不過gtk+的安裝太麻煩了,我裝了快兩個星期了,現(xiàn)在卡在gtk在configure時提示checking for XOpenDisplay... no libX11,快崩潰了,誰有解決的經(jīng)驗望能指點一二,不勝感激。
附上Windows下使用wxWidgets的簡要使用說明:
安裝wxWidgets源碼包后要先編譯,打開vs2008命令行到wxWidgets-2.9.1\build\msw下,輸入
- nmake /f makefile.vc BUILD=debug SHARED=1 MONOLITHIC=0 UNICODE=1
以及
- nmake /f makefile.vc BUILD=release SHARED=1 MONOLITHIC=0 UNICODE=1
其中,BUILD選項配置編譯類型,debug或release模式;SHARED為配置生成庫的類型,0為靜態(tài)庫,1為動態(tài)庫;MONOLITHIC選項配置構(gòu)建單一庫1還是多個組件庫0,使用單一構(gòu)建,項目的設置和開發(fā)會更加簡單,同時使用DLL構(gòu)建的話,只需分發(fā)一個DLL文件,如果使用非單一構(gòu)建(multilib),會構(gòu)建出多個不同的庫,這樣可以避免將整個wxWidgets的基本代碼鏈接到主程序,就可以去掉不需要的庫;UNICODE的編碼方式。
編譯后會出100多M漲到近2G。
再用Code::Block創(chuàng)建wxWidgets工程,會提示選擇主目錄,但是貌似CB自動選擇的include和library路徑都錯了,進入后修改,右鍵"Build options",第一頁#defines下加__WXMSW__(linux下加__UNIX__),第二頁Link libraries下去掉wxmsw29u,添加wxmsw29ud_core.lib、wxbase29ud.lib、wxtiffd.lib、wxjpegd.lib、wxpngd.lib、wxzlibd.lib、wxregexud.lib、wxexpatd.lib。第三頁將三項都改成應該指向的目錄,這樣配置就可以輕松的在Windows下使用wxWidgets了,界面也蠻不錯的,就是缺點華麗,沒Qt好看。
本文來自:http://blog.csdn.net/JuanA1/archive/2011/05/25/6446175.aspx
小結(jié):關(guān)于詳解 Ubuntu 10.10下Qt與wxWidgets 編譯的內(nèi)容介紹完了,希望本文對你有所幫助!