日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

wxwidget编译安装_wxWidgets的安装编译、相关配置、问题分析处理

發(fā)布時間:2024/9/27 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 wxwidget编译安装_wxWidgets的安装编译、相关配置、问题分析处理 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、介紹部分 (win7 下的 GUI 效果圖見 本篇文章的最后部分截圖2張)

wxWidgets是一個開源的跨平臺的C++構(gòu)架庫(framework),它可以提供GUI(圖形用戶界面)和其它工具。目前的2.x版本支持所有版本的Windows、帶GTK+或Motif的Unix和MacOS。相當于大家熟悉的 VC++。

二、wxWidgets的安裝與編譯:

二.1 基礎(chǔ)部分

編譯是少不了的操作,即使你下載的是安裝包,因為這個安裝包只是相當于自解壓包,我們還需要將其進行編譯,才能得到wxWidgets在Windows可用的庫。

如果你在參考了許多編譯文檔或教程之后發(fā)現(xiàn)還是沒有編譯出某些庫文件,如

wxbase28u_gcc_custom.dll

libwxmsw28ud_gl

libwxmsw28u_gl

libwxmsw28u_dbgrid

libwxmsw28ud_dbgrid

wxbase28ud_gcc_custom.dll

wxbase28u_gcc_custom.dll

(部分文件可能會有擴展名的缺少而不同)

這里使用的版本是wxWidgets?2.8.12(上面文件名中的28也是指這前兩位版本號2.8,版本2.9的同理)

在本文發(fā)表之時,wxWidgets?2.8.12是當前的穩(wěn)定版。如下,

Latest?Development?Release:?2.9.5

Current?Stable?Release:?2.8.12

Previous?Stable?Release:?2.6.4

先檢查一下系統(tǒng)的環(huán)境變量中有無Mingw32(32位)的bin目錄的值,集成安裝的大致安裝位置是C:\CodeBlocks\MinGW\bin ,要用到的是其中的mingw32-make.exe 。

環(huán)境變量的設(shè)置,此外設(shè)置用戶變量(系統(tǒng)變量要重啟才行,并且對所有用戶都有效),只要簡單注銷一下當前用戶即可生效(而用path命令設(shè)置有時不生效)。

在這里說一下,一般會用到的與本IDE設(shè)置有關(guān)的環(huán)境變量,

1?是編譯環(huán)境用到的bin目錄,即大致類似于C:\CodeBlocks\MinGW\bin

2?調(diào)用庫文件時用到的編譯完成后,放置生成的庫文件的目錄。這個目錄下面會說到。

解壓下載的壓縮包,并進入?wxMSW-2.8.12\build\msw子目錄,打開命令行切換到這一目錄(或在這個文件夾空白處按住Shift,并右鍵,選擇“在此處打開命令窗口”,直接進入)。因為前面設(shè)置好了環(huán)境變量(不論是用戶級的,還是系統(tǒng)級的,最后,再打開cmd.exe,執(zhí)行path檢查一下是否添加成功)

編譯時用到的命令,如果用它,就按下文件相關(guān),修改 config.gcc 文件后,執(zhí)行

mingw32-make.exe?-f?makefile.gcc?(無參數(shù),參數(shù)寫在config.gcc中)其中的 -f 是 file,為mingw32-make.exe指定要編譯的文件 makefile.gcc。

如果不寫在配置文件中,則可以寫成如下示例(只是動態(tài)庫SHARED=1)

mingw32-make -f makefile.gcc BUILD=release SHARED=1 UNICODE=1????(release 版本)

mingw32-make -f makefile.gcc BUILD=debug SHARED=1 UNICODE=1????(debug 版本)

下面是完整的config.gcc文件內(nèi)容,在看之前,請先略看,并跳到下面的內(nèi)容,但在正式編譯時,請細看下面內(nèi)容,即使你用的是加了參數(shù)的編譯方法,如上面2條命令,可能會無法編譯出某些文件。圖形界面開發(fā),要考慮的地方很多,入門后,自然更加熟練:

# =========================================================================# This configuration file was generated by

# Bakefile0.2.9 (http://www.bakefile.org)

# Beware that all changes made tothisfile will be overwritten next

# time you run Bakefile!#=========================================================================#-------------------------------------------------------------------------# These are configurable options:

#-------------------------------------------------------------------------#設(shè)置是否共享生成的庫文件(先默認如下)

# Compiler flags to link shared library

LINK_DLL_FLAGS?= -shared

# Compiler flags to link loadable module

LINK_MODULE_FLAGS?= -shared

#編譯器(這個不能動,其它的編譯器也有對應(yīng)的 config.***文件)

# C compiler

CC=gcc

# C++compiler

CXX= g++#下面的幾條,與編譯時占用的CPU等系統(tǒng)資源有關(guān),可能。

# Standard flagsforCC

CFLAGS?=# Standard flagsfor C++CXXFLAGS?=# Standard preprocessor flags (commonforCC and CXX)

CPPFLAGS?=# Standard linker flags

LDFLAGS?=# The C preprocessor

CPP?= $(CC) -E

#靜態(tài)庫0 、動態(tài)庫 1# What type of library to build? [0,1]

SHARED?= 0#沒了解(默認)

# Build wxUniversal instead of native port? [0,1]

WXUNIV?= 0#支持寬字符集,必須是1

# Compile Unicode build of wxWidgets? [0,1]

UNICODE?= 1# Use MSLU library when building Unicode version. [0,1]

MSLU?= 0#編譯的二進制的類型:Debug、Release(這兩個都要編譯,方便以后用到)

# Type of compiled binaries [debug,release]

BUILD?=release

#這里說一下,下面的參數(shù),能開的基本上都開了,但個別的會說明一下作用。

# Should debugging info be includedin the executables? The defaultvalue

#"default" means that debug info will be included if BUILD=debug

# and not includedif BUILD=release. [0,1,default]

DEBUG_INFO?= default# Should __WXDEBUG__ be defined? The default value "default"means that it will

# be definedif BUILD=debug and not defined if BUILD=release. [0,1,default]

DEBUG_FLAG?= default#是編譯分開的多個庫,還是一個大的整體(如果選擇1,會無法得到目標庫,生成的庫是以monolithic 為前綴的,而且很大)

# Multiple libraries or single huge monolithic one? [0,1]

MONOLITHIC?= 0#圖形界面,少不了

# Build GUI libraries? [0,1]

USE_GUI?= 1# Build wxHTML library (USE_GUI must be1)? [0,1]

USE_HTML?= 1# Build multimedia library (USE_GUI must be1)? [0,1]

USE_MEDIA?= 1# Build wxXRC library (USE_GUI must be1)? [0,1]

USE_XRC?= 1# Build wxAUI library (USE_GUI must be1)? [0,1]

USE_AUI?= 1# Build wxRichTextCtrl library (USE_GUI must be1)? [0,1]

USE_RICHTEXT?= 1# Build OpenGL canvas library (USE_GUI must be1)? [0,1]

USE_OPENGL?= 1# Build ODBC database classes (USE_GUI must be1)? [0,1]

USE_ODBC?= 1# Build quality assurance classes library (USE_GUI must be1)? [0,1]

USE_QA?= 1# Enable exceptionsin compiled code. [0,1]

USE_EXCEPTIONS?= 1# Enable run-time type information (RTTI) in compiled code. [0,1]

USE_RTTI?= 1# Enable threadingin compiled code. [0,1]

USE_THREADS?= 1#下面這個參數(shù)在前面如果設(shè)置了編譯類型是Relesse是設(shè)置為1,Debug時為0(我在編譯時,后者Debug為1時中斷了)

# Enable wxCairoContextfor platforms other than Linux/GTK. [0,1]

USE_CAIRO?= 1# Link with gdiplus.lib? (Needed for wxGraphicsContext, will also set wxUSE_GRAPHICS_CONTEXT) [0,1]

USE_GDIPLUS?= 1# Isthis official build by wxWidgets developers? [0,1]

OFFICIAL_BUILD?= 0# Usethisto name your customized DLLs differently

VENDOR?=custom

#

WX_FLAVOUR?=#

WX_LIB_FLAVOUR?=#下面的大概是特殊設(shè)置

# Name of your custom configuration. This affects directory

#where object files are stored as well asthe location of

# compiled .lib files and setup.h under the lib/toplevel directory.

CFG?=# Compiler flags needed to compile test suiteintests directory. If you want

# to run the tests,setit so that the compiler can find CppUnit headers.

CPPUNIT_CFLAGS?=# Linker flags needed to link test suiteintests directory. If you want

# to run the tests, include CppUnit library here.

CPPUNIT_LIBS?=# Version of C runtime library to use. You can changethisto

#static if SHARED=0, but it is highly recommended to not do# itif SHARED=1 unless you know what you are doing. [dynamic,static]

RUNTIME_LIBS?=dynamic

# Set the version of your Mingw installation here.

#"3" ...... this is for Mingw 2.0or newer (comes with gcc3)

#"2.95" ... for Mingw 1.1 or any of the older versions [3,2.95]

GCC_VERSION?= 3

config.gcc 配置文件結(jié)束!!

動態(tài)庫dll ? vs. ?靜態(tài)庫lib

從編譯結(jié)果上看,C++庫可以被編譯成“靜態(tài)”鏈接庫,也可以被編譯成“動態(tài)”鏈接庫。所謂“鏈接庫”的意思就是,庫自身并不可以被執(zhí)行。應(yīng)用程序才是可執(zhí)行的,為了寫一個應(yīng)用程序,可能需要用到很多功能,其中一些功能,應(yīng)用程序的作者并不用自己實現(xiàn),而是直接使用鏈接庫即可。把應(yīng)用程序與庫在功能上進行合并的過程,就叫做過“鏈接”。如前所有述,有兩種鏈接方法:靜態(tài)或動態(tài)。

所謂“靜態(tài)鏈接”,就是直接把庫文件和可執(zhí)行文件合二為一,形成一個文件。這種情況下,發(fā)布可執(zhí)行文件時,就不必另外附加那個功能庫了;因為事實上那個功能庫已經(jīng)“嵌入”在可執(zhí)行文件中(可執(zhí)行文件的體積,變大了)。靜態(tài)鏈接方法,適用于功能簡單應(yīng)用程序。

所謂“動態(tài)鏈接”,是指程序在運行時,才會去尋找動態(tài)庫中所需要的功能,然后在內(nèi)存中加載入動態(tài)庫。這種情況下,可執(zhí)行文件與動態(tài)庫獨立存在,沒有合成一體,在發(fā)布程序時,你必須兩個文件一起安裝到用戶的電腦上。動態(tài)鏈接方法,適用于相對復(fù)雜的應(yīng)程序,通常這種情況下,為了方便用戶安裝,我們會提供一個安裝程序。 另外,在Linux系統(tǒng)中,“動態(tài)鏈接庫”通常被稱為“共享庫”(文件擴展名也改為.so);這也說出了“動態(tài)鏈接”這項技術(shù)帶來的另一個好處:多個應(yīng)用程序可以共用一個獨立的動態(tài)庫。

如果把蓋房子想像成寫程序的話,當我們需要建造其中的自來水系統(tǒng)時,可以把水庫當成是一種功能鏈接庫。那么,當我們是在鄉(xiāng)下自建一座獨門獨戶的小樓,那么可以采用“靜態(tài)鏈接”的方法,即在自家樓里砌個水庫,自個兒使用,當然這個自建的水庫往往增加了小樓的體積。來到城里,城里的一座高樓住著千家萬戶,這時,“動態(tài)鏈接”技術(shù)派上用上,所有住戶共享一個水庫,當你需要水時,打開水龍頭,水就從外部“動態(tài)”而來。

為了方便以后使用,今天wxWidgets將我們編譯成至少兩個版本,即動態(tài)庫和靜態(tài)庫 ,debug 和 release ,2x2=4,其它參數(shù)不變。而在CodeBlocks的工具欄中“build target”可以選擇你當前的編譯類型,并且相關(guān)的信息,可能也與這有關(guān),具體去分析,我們一個也不能少。

DEBUG vs. RELEASE

DEBUG 指“調(diào)試”版。表示編譯出所庫含有調(diào)試信息,這自然會讓庫變得很大,但有利于我們寫程序時跟蹤也發(fā)現(xiàn)錯誤。

RELEASE 指 “發(fā)行”版。表示我們認定程序?qū)懙貌畈欢嗔?能解決的問題都解決了,錯誤相對比較少),這時調(diào)試信息就不需要了,庫恢復(fù)它原來的大小。

為了方便調(diào)試與發(fā)而程序,DEBUG和RELEASE,同樣的,我們一個也不能少。

UNICODE vs. 非 UNICODE

傳統(tǒng)C++程序中,對普通的1個英文字符采用1個字節(jié)表示,而對1個漢字采用兩個字節(jié)表示。比如有這樣一句話:

“文件c:\abc\efg\我的文檔\奧運知識ABC\乒乓球基礎(chǔ)知識.txt無法打開!”

假設(shè)計數(shù)以0開始,那么例子中那句話,第0個字符是“文”字的前半個字符,第1個字符則是“文”字的后半個字符。事實上半個漢字是沒意義的,它只會為字符串處理上帶來困難。比如,假設(shè)我們要把上述那句話顯示在顯示在某個窗口上,但由于窗口太小,顯示不下這時我們希望將那句話的截掉一點,結(jié)果類似:

“文件c:\abc\efg\我的文檔\奧運知識ABC\乒乓球基...”

這個過程看似簡單,但其實復(fù)雜,如果不進行特殊的處理,程序很要可能會在某個漢字的半個字符處截斷那句話,而1個漢字一旦被“腰斬”了,剩下的那個半個漢字,無論是上半身還是下半身,就會在屏幕上顯示亂碼。

解決這個問題,方法有很多種,其中采用“UNICODE”是個相對通行而簡單的辦法,并且解決得比較徹底。“UNICODE”的方案說起來也簡單,就是用兩個字節(jié)甚至四個字節(jié)去表達一個字符(無論是英文字符還是中文、日語等)。

相關(guān)知識 結(jié)束!

二.2 目錄知識

要處理漢字,所以在編譯過程,我們只選擇UNICODE的方案,故會編譯 4 次。每次30分鐘左右,計算機配置高的話,可以同時進行兩次。由于只是需最終編譯的庫,推薦的方法是,將目錄?wxMSW-2.8.12/ 復(fù)制4份,每一份均作相應(yīng)的編譯。 然后將目錄進行合并,我們最終需要的不是build目錄下的文件,而是程序根目錄 lib 中的庫文件。參考下面的表格,就能得出庫文件的命名機制,見表格中的【注】,所以4次編譯不會出現(xiàn)庫文件重名,只是相似。

編譯完成后,在msw目錄下生成的目錄如表格,返回到?wxMSW-2.8.12\lib?目錄,我們發(fā)現(xiàn)多了?gcc_lib(靜態(tài))或gcc_dll()動態(tài)

庫類型

靜態(tài)=0

動態(tài)=1

編譯時下面目錄下會生成子目錄

wxMSW-2.8.12\build\msw\

編譯時下面目錄下

會生成子目錄

wxMSW-2.8.12\lib

Unicode

debug

動態(tài)

gcc_mswuddll

gcc_dll

靜態(tài)

gcc_mswud

gcc_lib

release

動態(tài)

gcc_mswudll

gcc_dll

靜態(tài)

gcc_mswu

gcc_lib

上面3項知識詳見下文

【注】:gcc_msw(gcc編譯的windows庫),

u=unicode,d=debug,dll=動態(tài),

lib=靜態(tài)(略寫),r=release(略寫)

gcc_dll的目錄下有

mswu 或 mswud

gcc_lib的目錄下有

mswu 或 mswud

相關(guān)目錄及操作 的截圖參考:

1 編譯過程,剛剛開始,即被我無情 Ctrl + C 終止。提示,編譯前要先考慮是否如上面示例修改 config.gcc 文件。時間:30分鐘左右。

2 msw 目錄下的兩個主要文件 :配置 - config.gcc、及 makefile.gcc 。目錄 gcc_mswu 在編譯之前不存在(顯然這是編譯的 Unicode + 靜態(tài)庫 + Release)

3 lib 目錄下編譯后的文件目錄結(jié)構(gòu),目錄“_sc”及下面的3個文件在不同的編譯條件下不會變化。這里要提到的是前面在環(huán)境變量部分沒有講完的第2個環(huán)境變量,雖然不是必須,但是這種解決問題或排除程序報錯的方法是很重要的。參考下面的圖片,一一說來。

4 進入上圖的 gcc_lib ,里面的目錄結(jié)構(gòu)如下圖,包括各種 (Unicode + 靜態(tài)庫 + Release),其中的 mswu 目錄下的文件有時也會因為缺少而報錯,比如其子子目錄中的 setup.h 。

5 如果大家采用我的方法,將靜態(tài)庫、動態(tài)庫分別合并到 gcc_lib 及 gcc_dll ,下圖就是相應(yīng)結(jié)果:

關(guān)于此處涉及到的環(huán)境變量問題在這里細說一下,按照下圖的庫文件放置方法在編譯時會報錯,大多是找不到某某文件,而你到這個目錄下查找,卻發(fā)現(xiàn)文件在那呀!

CodeBlocks 創(chuàng)建 Project 時會的步驟要求你選擇 wxWidgets 的存放目錄,編譯時編譯器就會從這個目錄下找 lib 下的庫文件,但不會找子目錄下的文件。因而,如下圖放置庫文件,會提示缺少相關(guān)文件。那么,怎么辦?有兩種辦法。

1 將 gcc_lib 及 gcc_dll 加到環(huán)境變量中

2 直接把?gcc_lib 及 gcc_dll?里面的文件及目錄全部移動到 lib 根目錄下。不上圖了,移動時不用擔(dān)心文件或目錄重名。

這種方法是重點:前提是你編譯出了這個文件,編譯時提示找不到某文件,就將其放置在環(huán)境變量中。其實初期使用時擔(dān)心的都是缺少文件的報錯,這你真心沒辦法。So,花點時間在編譯工作上吧,沒有壞處的!!

三、供參考的相關(guān)資料:

http://wiki.codeblocks.org/index.php?title=WxSmith_tutorial:_Hello_world?(圖形界面重點入門參考,全英文。雖然,與本篇版本不同,但不出錯。用?wxFormBuilder,就不如用集成的wxSmith,知其一,則知它們)

四、相關(guān)問題羅列:

1 編譯器版本與庫文件的關(guān)系,前面也有提到,如果使用了別人編譯的庫,最好就要用編譯這個庫使用的編譯器版本,即使只是版本號不同。這里也發(fā)現(xiàn)為什么linux下提供的程序多為源碼,使用時需要編譯,有編譯器版本與庫文件不對應(yīng)的原因,就像一臺組裝機,必需要考慮硬件不兼容問題。而這個問題在windows及MacOS下很少,因為這些平臺下的程序所需調(diào)用的庫大多內(nèi)置在了程序中。雖然體積會大點,卻得到了體驗。回想一下,桌面版本linux 六個月一次升級,大多數(shù)程序都要同時重新編譯,拿播放器 VLC 來說,在Fedora 上就要為是Fedora 18 及 Fedora 19 而分別編譯發(fā)行版本(這個可能會不用在本機編譯了);而服務(wù)器版Linux很少升級,是為避開這個問題,服務(wù)器上的各種服務(wù)器軟件,怎么能夠奔命于編譯、編譯、再編譯的過程,而連基本服務(wù)都沒做好。導(dǎo)致原因,不能與它的自由,開源脫開關(guān)系。所以,Linux會有那么一個階段,分久必合,大家坐下來 制定一個ISO標準,這為的是長遠發(fā)展,但不能失去了它的根本:自由、開源。我曾經(jīng)與朋友打了這么一個比喻,linux像組裝機,各種配件,自由搭配,只要沒有兼容性問題;Windows 則是品牌機,辦公、影音、游戲,應(yīng)有盡有。物盡其用,最終提供服務(wù)的是應(yīng)用程序,而它們跑在系統(tǒng)的大車之上。

2 64位 或 32位 系統(tǒng)的影響,雖說,用的是32位的編譯器,可編譯出來的程序在我64拉win7上部分效果不能實現(xiàn),而拷貝到32位win7上,運行良好(如果缺少文件,就在本機上復(fù)制它到目標電腦system32目錄,這個目錄是系統(tǒng)默認加入到環(huán)境變量中的)。不過可能只是一面之詞,畢竟只是我一臺機子上的現(xiàn)象,而我的電腦用運行著 HIPS(Comodo防火墻內(nèi)置)

3 網(wǎng)上有一種 wxpack 是庫文件編譯好的,但現(xiàn)在新版本的沒有編譯了,vc++、gcc編譯都有,安裝后數(shù)個G的體積,但問題是還是會出現(xiàn)這里列出的第 1 條問題,而且那個版本的編譯器不容易配置。

4 這一條不是什么問題,而是在?wxMSW-2.8.12 根目錄,有一個?samples 子目錄,里面存放的是圖形界面的若干個源碼示例,沒錯,需要編譯。在?samples 目錄下也有一個 makefile.gcc,編譯就像編譯庫文件一樣 ,命令行下切換到這下目錄,使用命令?mingw32-make.exe?-f?makefile.gcc只是這個 makefile.gcc 是全部編譯 samples?目錄下的所有工程示例(一個子目錄就是一個工程)。

而單個編譯時,要進入相應(yīng)工程目錄,同樣有 makefile.gcc 文件,操作同上,可能并不是每個都能編譯成功。編譯成功的對應(yīng)目錄下會有?gcc_mswu 其中有對應(yīng)的 exe 可執(zhí)行文件,并拷貝到其它電腦運行一下。

示例?calendar

示例 aui

wxWidgets 工程的具體創(chuàng)建過程本文不作敘述。

文中部分內(nèi)容可能會有所不同,請以操作為準,如果希望本文更加完善,請告知相關(guān)內(nèi)容,并在此對文中引用的文章的作者表示感謝;

本文可能還會更新...

總結(jié)

以上是生活随笔為你收集整理的wxwidget编译安装_wxWidgets的安装编译、相关配置、问题分析处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。