1. 怎麼在codeblocks中安裝wxwidgets圖形庫
可以,wx可以編譯成單個exe執行文件。 但前提是你的wx本身是被build編譯成靜態庫lib的版本,而非dll版本。 如果沒有,就需要找到源碼單獨編譯一遍wx。 編譯wx一般要注意是否靜態、是否unicode,是否包含c++運行庫等幾個選項。
2. 怎麼編譯wxwidgets
1 、打開工程 wxWidgets-2.8.7\build\msw\wx_dll.dsw ,將其轉換為 vs2005 工程關閉保存,再打開工程 wx_dll.sln 。
2 、將解決方案配置更換為 DLL Unicode Debug 。
3 、依次單獨編譯 wxregex 、 wxzlib 、 wxexpat 、 wxtiff 、 base 、 wxjpeg 、 wxpng 、 core 、 odbc 、 xml 、 adv 、 html 、 net 、 gl 、 dbgrid 、 qa 、 richtext 、 aui 、 xrc 、 media 庫。
其中目前版本 odbc 、 gl 、 dbgrid 工程並不完善,出現編譯錯誤忽略即可。
4 、如果以上順利通過,那麼將得到以下我們需要的庫文件
編譯預定義環境
wxWidgets-2.8.7\lib\vc_dll\mswud\wx\ setup.h
wxWidgets-2.8.7\lib\vc_dll\mswud\wx\msw\ rcdefs.h
wxWidgets-2.8.7\lib\vc_dll\wxbase28ud_net_vc_custom.dll
wxWidgets-2.8.7\lib\vc_dll\wxbase28ud_odbc_vc_custom.dll
wxWidgets-2.8.7\lib\vc_dll\wxbase28ud_vc_vc_custom.dll
wxWidgets-2.8.7\lib\vc_dll\wxbase28ud_xml_vc_custom.dll
wxWidgets-2.8.7\lib\vc_dll\wxmsw28ud_adv_vc_custom.dll
w xWidgets-2.8.7\lib\vc_dll\wxmsw28ud_aui_vc_custom.dll
w xWidgets-2.8.7\lib\vc_dll\wxmsw28ud_core_vc_custom.dll
wxWidgets-2.8.7\lib\vc_dll\wxmsw28ud_gl_vc_custom.dll
w xWidgets-2.8.7\lib\vc_dll\wxmsw28ud_html_vc_custom.dll
w xWidgets-2.8.7\lib\vc_dll\wxmsw28ud_media_vc_custom.dll
w xWidgets-2.8.7\lib\vc_dll\wxmsw28ud_qa_vc_custom.dll
w xWidgets-2.8.7\lib\vc_dll\wxmsw28ud_richtext_vc_custom.dll
w xWidgets-2.8.7\lib\vc_dll\wxmsw28ud_xrc_vc_custom.dll
wxWidgets-2.8.7\lib\vc_dll\wxbase28ud.lib
wxWidgets-2.8.7\lib\vc_dll\wxbase28ud_net.lib
wxWidgets-2.8.7\lib\vc_dll\wxbase28ud_xml.lib
wxWidgets-2.8.7\lib\vc_dll\wxexpatd.lib
wxWidgets-2.8.7\lib\vc_dll\wxjpegd.lib
wxWidgets-2.8.7\lib\vc_dll\wxmsw28ud_adv.lib
wxWidgets-2.8.7\lib\vc_dll\wxmsw28ud_aui.lib
wxWidgets-2.8.7\lib\vc_dll\wxmsw28ud_core.lib
wxWidgets-2.8.7\lib\vc_dll\wxmsw28ud_html.lib
wxWidgets-2.8.7\lib\vc_dll\wxmsw28ud_media.lib
wxWidgets-2.8.7\lib\vc_dll\wxmsw28ud_qa.lib
wxWidgets-2.8.7\lib\vc_dll\wxmsw28ud_richtext.lib
wxWidgets-2.8.7\lib\vc_dll\wxmsw28ud_xrc.lib
wxWidgets-2.8.7\lib\vc_dll\wxpngd.lib
wxWidgets-2.8.7\lib\vc_dll\wxregexud.lib
wxWidgets-2.8.7\lib\vc_dll\wxtiffd.lib
wxWidgets-2.8.7\lib\vc_dll\wxzlibd.lib
注意:將以上文件按照文件按照原目錄相對結構拷貝到要製作的庫路徑下,並將 wxWidgets-2.8.7\ include 目錄也拷貝到其目錄下,以後要使用只需要包含這些路徑即可。
為了以後開發方便,設定的開發庫路徑為:
wxLib\include
wxLib\Debug\mswud\wx\msw
wxLib\Debug
3. 如何編譯wxWidgets示常式序
wxWidgets
wxWidgets是一個程序開發框架/庫, 允許你在Windows、Mac、linux中使用相同的代碼跨平台開發。它主要用C++寫成,但也可以與其他語言綁定比如Python、Perl、Ruby。
本教程中我將向你展示如何在基於Debian的linux中如Ubuntu和Linux Mint中編譯wxwidgets 3.0+。
從源碼編譯wxWidgets並不困難,僅僅需要幾分鍾。庫可以按不同的方式來編譯,比如靜態或者動態庫。
1. 下載 wxWidgets
第一步你需要從wxwidgets.org下載wxWidgets源碼文件。
做完後,解壓到目錄。
2. 設置編譯環境
要編譯wxwidgets,我們需要一些工具包括C++編譯器,在Linux上是g++。所有這些可以通過apt-get工具從倉庫中安裝。
我們還需要wxWidgets依賴的GTK開發庫。
$ sudo apt-get install libgtk-3-dev build-essential checkinstall
這個叫做checkinstall的工具允許我們為wxwidgets創建一個安裝包,這樣之後就可以輕松的使用包管理器來卸載。
3. 編譯 wxWidgets
進入到wxWidgets解壓後的目錄。為了保持清潔,創建一個編譯用的目錄。
$ mkdir gtk-build
$ cd gtk-build/
現在運行configure和make命令。每個將花費一些時間來完成。
$ ../configure --disable-shared --enable-unicode
$ make
"--disable-shared"選項將會編譯靜態庫而不是動態庫。
make命令完成後,編譯就成功了。是時候安裝wxWidgets到正確的目錄。
更多信息請參考install.txt和readme.txt,這可在wxwidgets中的/docs/gtk/目錄下找到。
4. 安裝 checkinstall
現在我們不使用"make install"命令,我們使用checkinstall命令來創建一個wxwidgets的deb安裝包。運行命令:
$ sudo checkinstall
checkinstall會詢問幾個問題,請保證在提問後提供一個版本號,否則將會失敗。
完成這一切後,wxWidgets就安裝好了,deb文件也會創建在相同的目錄下。
5. 追蹤安裝的文件
如果你想要檢查文件安裝的位置,使用dpkg命令後面跟上checkinstall提供的包名。
$ dpkg -L package_name
/.
/usr
/usr/local
/usr/local/lib
/usr/local/lib/libwx_baseu-3.0.a
/usr/local/lib/libwx_gtk3u_propgrid-3.0.a
/usr/local/lib/libwx_gtk3u_html-3.0.a
/usr/local/lib/libwxscintilla-3.0.a
/usr/local/lib/libwx_gtk3u_ribbon-3.0.a
/usr/local/lib/libwx_gtk3u_stc-3.0.a
/usr/local/lib/libwx_gtk3u_qa-3.0.a
/usr/local/lib/libwx_baseu_net-3.0.a
/usr/local/lib/libwxtiff-3.0.a
6. 編譯示例
編譯wxWidgets完成後就可以馬上編譯示常式序了。在相同的目錄下,一個新的sample目錄已經創建了。
進入它並運行下面的命令
$ compile samples
$ cd samples/
$ make
make命令完成後,進入sample 子目錄,這里就有一個可以馬上運行的Demo程序了。
7. 編譯你的第一個程序
你完成編譯demo程序後,可以寫你自己的程序來編譯了。這個也很簡單。
假設你用的是C++,這樣的話你還可以使用編輯器的高亮特性。比如gedit、kate、kwrite等等。或者用全功能的IDE像Geany、Codelite、Codeblocks等等。
然而你的第一個程序只需要用一個文本編輯器來快速完成。
如下:
#includewx.h>
classSimple:public wxFrame
{
public:
Simple(const wxString& title)
: wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(250,150))
{
Centre();
}
};
classMyApp:public wxApp
{
public:
boolOnInit()
{
Simple*simple =newSimple(wxT("Simple"));
simple->Show(true);
returntrue;
}
};
wxIMPLEMENT_APP(MyApp);
現在保存並用下面的命令編譯。
# compile
$ g++ basic.cpp `wx-config --cxxflags --libs std`-o program
# run
$ ./program
4. cygwin和mingw的區別
Unix下編譯通過的C代碼,在win32下編譯是不能通過的 ,當然Unix 和win32的API都是符合標准C,也就是說,大多數函數調用在unix和win32下是相同的.但是,unix有自己一些獨特的API(如fork,spawn,signals,select,sockets等),如果代碼中使用了這些API,在win32下當然找不到對應的庫.
但是,這些API的功能在win32中也能實現,也許你已經發現了一個能讓window編譯Unix風格代碼的方法:
1.修改編譯器,讓window下的編譯器把諸如fork的調用翻譯成等價的形式--這就是mingw的做法.
2.修改庫,讓window提供一個類似unix提供的庫,他們對程序的介面如同unix一樣,而這些庫,當然是由win32的API實現的--這就是cygwin的做法.
MinGW相比CygWin/gcc來講,更加貼近win32。因為它幾乎支持所有的Win32API。它所連接的程序,不需要任何第三方庫即可運行。
CygWin/gcc,其實這是兩個東西。CygWin是一個讓Windows擁有Unix-like環境的軟體。而gcc就是安裝在CygWin上的編譯器。
CygWin/gcc與MinGW的最大區別在於:使用CygWin/gcc可以在Windows下調用unix-like的API,(如fork,spawn,signals,select,sockets等)。也就是說Cygwin是運行在Windows下的,但是她使用的是Unix-like系統的函數和思想。由於這個區別,導致的結果就是用CygWin/gcc編譯出來的程序可以無縫的運行在*nix環境下。但是如果調用了unix特有的API函數,在windows環境下不能正常運行,如果想在windows下正常運行的,就必須依賴cygwin1.dll,速度上會有些影響。
而用MinGW編譯出來的程序,如果源代碼裡面調用了unix環境的API,則MinGW會把這些對UNIX的API調用翻譯成win32下等價的形式。同時這個程序是不能在windows下運行的。
說白了,如果你是想在windows環境下開發linux運行程序,那麼CygWin/gcc是你的不二之選。
而如果你想開發的是windows運行程序,並且追求速度,那麼二者相比而言,MinGW是更好的選擇
我沒有用過這兩個工具,只是有點想選擇一個來用,於是在網上比較一下兩者有啥不同,然後選一個適合自己的。過程中,我發現網上一份文章可能被多個人轉載,被多個人稍微修改後當成自己的隨筆寫出,誤認不淺。
說一點,什麼cygwin編譯的程序可以無縫在linux上運行,根本就不能這么理解。
cygwin官方的一個定義是Cygwin is not a way to run native linux apps on Windows. You have to rebuild your application from source if you want it to run on Windows.
翻譯過來就是
cygwin不是讓linux程序能在windows上運行的方法,如果你想要讓linux程序能在windows運行,那麼你只有用cygwin來重新編譯一下源文件。
這句話完全反駁了無縫運行在linux的說法。就是說你在linux上編譯的elf程序不能直接拿到cygwin上運行,同樣,你用cygwin編譯的程序也不是linux的elf格式,而是exe格式,exe是無法在linux上運行的。
cygwin和mingw都是為用戶提供在windows操作系統使用GNU工具的方法,使得在windows上可以編譯為linux寫的c源代碼並運行(讓你可以用signal等linux才有的api)。真正的不同在於
1,cygwin大,mingw小
2,cygwin編譯後的exe需要cygwin1.dll作為支持,而mingw不需要就可以直接運行,因為有中間層所以cygwin慢,mingw快。
3,cygwin包含的內容更全面,能編譯通過的linux源文件更多,mingw的min是minimalist所以能編譯通過的更少。但,不是全部,就是說別指望你可以把任何為linux寫的源代碼在cygwin或mingw編譯通過並運行。
What Is Cygwin?
Cygwin is a Linux-like environment for Windows. It consists of two parts: A DLL (cygwin1.dll) which acts as a Linux API emulation layer providing substantial Linux API functionality.
A collection of tools which provide Linux look and feel.
The Cygwin DLL currently works with all recent, commercially released x86 32 bit and 64 bit versions of Windows, with the exception of Windows CE.
Note that the official support for Windows 95, Windows 98, and Windows Me will be discontinued with the next major version (1.7.0) of Cygwin.
What Isn't Cygwin?
Cygwin is not a way to run native linux apps on Windows. You have to rebuild your application from source if you want it to run on Windows.
Cygwin is not a way to magically make native Windows apps aware of UNIX ? functionality, like signals, ptys, etc. Again, you need to build your apps from source if you want to take advantage of Cygwin functionality.
MinGW: A collection of freely available and freely distributable Windows specific header files and import libraries combined with GNU toolsets that allow one to proce native Windows programs that do not rely on any 3rd-party C runtime DLLs.
MinGW:根據我的理解,它是一個Windows下的編譯器(實際上是一系列開發工具)。與Windows下其它編譯器不同的是,MinGW與Linux下廣泛使用的GNU(基本上)完全兼容,這意味著,在Linux下如何編譯源代碼,在MinGW中也可以以完全相同的方式編譯。
我個人以為,MinGW的出現是有原因的:有些Linux下的開發人員(比如開源陣營)發布的源代碼通常只提供Linux下的編譯方式,而不提供Windows下的編譯方式(這可能與其不熟悉windows操作系統有關),但確實有不少用戶需要在在Windows下編譯使用此源代碼。這在種情況下,如果Windows用戶想用VC、BC等編譯器編譯該源代碼,必須重寫Makefile(各種編譯器所支持的Makefile不盡相同),工作量比較大不說,還很難保證不出錯。MinGW的出現,提供了兩個平台下的「跨平台編譯方案」。MinGW與MSYS相配合,連./configure都有了。與GNU不同的是,MinGW編譯生成的是Windows下的可執行文件(.exe)或庫文件(.dll,.lib)——不過編譯過程中的的中間文件仍然是.o文件,而不是.obj文件(這當然無所謂了,中間文件嘛,編譯完成後就沒有用了)。MinGW好像是在Cygwin基礎上發展而來的。順便說一下Cygwin,它與MinGW在想法上基本是一致的,兩者相比,Cygwin是重量級的(需下載50M以上直至數百兆不等,安裝後佔用空間可達1G),MinGW是輕量級的(需下載的文件只有20M,安裝後70M左右),這是單純從體積上說的,另外Cygwin現在據說也不是完全免費的了。
wxWidgets-2.6.2在Windows下的編譯方式。用VC編譯的話,有兩種方式:VC工程,Makefile。前者就不用說了,用VC打開*.dsw文件,F7就可以了。這里說一下Makefile的編譯方式,首先進入命令行窗口(cmd.exe 或 command.exe),切換路徑到wxWidgets源代碼所在目錄下的 build/msw 子目錄,執行「nmake -f makefile.vc」即可。用MinGW編譯的話,基本上與前面類似,也是進入命令行窗口(cmd.exe 或 command.exe),切換路徑到wxWidgets源代碼所在目錄下的 build/msw 子目錄,只是執行的命令行是「mingw32-make -f makefile.gcc」。最終生成的庫文件位於lib目錄中。當然,編譯之前可能需要設置一下,比如指定編譯為動態庫(DLL)還是靜態庫(LIB),或者是否採用UNICODE,等等,設置方式就是修改 build/msw 子目錄中的 config.vc 或 config.gcc 文件。
VC6和MinGW相比,兩者在編譯速度,以及在編譯後的文件的大小方面都有較大不同。根據我編譯wxWidgets時所做的簡單統計,VC6的編譯速度比MinGW至少快一倍,VC6編譯生成的動態庫DLL文件比MinGW小一倍左右,VC6編譯生成的靜態庫LIB文件比MinGW要大不少(大約是1.5倍)。下面的圖片兩者編譯生成的文件大小的對比,左側是VC6生成的,右側是MinGW生成的,圖一是編譯生成動態庫DLL的情況,圖二是編譯生成靜態庫LIB文件的情況:
總起來說,在Windows系統下,還是用VC編譯比較合適,沒辦法的情況下才會選擇MinGW。
5. wxwidgets用codeblocks編譯器編譯出的程序必須在加上dll才能獨立運行, 怎麼用靜態編譯
首先,你要編譯wxwidgets,生成靜態的wx庫
其次,在codeblocks里使用wx向導建立wx工程的時候,在選擇庫設定的時候,不要勾選使用wxWidget dll選項即可,默認就會使用靜態庫鏈接
codeblocks,wx開發有問題,歡迎到網路codeblocks貼吧找我
6. mingw wxwidgets 使用問題
你如何用的是msys,有wx-config的話。就用
g++ <文件名> -o <輸出文件名> $(wx-config --libs --cxxflags)
如何你不用msys,或者沒有wx-config。
就找到wxWidgets的庫文件存放的目錄,和頭文件目錄。
g++ <文件名> -o <輸出文件名> -I<頭文件目錄> -L<庫文件存放目錄>
加上所有wxWidgets編譯出的的庫文件
7. 使用CodeBlocks軟體wxWidgets的編譯教程
方法/步驟
1、中間安裝步驟省略,直接Next就行了,到了下圖,修改你要安裝的路徑,要記下來,點擊Install,安裝完成後,設置環境變數,在用戶的Path中添加安裝根目錄+\MinGW\bin;和安裝根目錄\MinGW\mingw32\bin。
2、wxWidgets的安裝
跟codeblocks的安裝一樣,獲得系統管理員許可權進行安裝,運行如下顯示,直接Next。
3、Next之後,中間步驟一直Next就行,直到跳到設置安裝目錄,如下圖,也要記住安裝目錄,雖然不要設置環境變數,但是在wxWidgets編譯的時候需要用到安裝路徑。
4、編譯wxWidgets
前面工作都做好了,下面就簡單了,首先利用Dos命令行窗口進入wxWidgets安裝的根目錄+\build\msw\文件夾,如下圖所示,我的wxWidgets安裝的在C:\wxWidgets盤,編譯命令如下,逐個編譯即可完成
mingw32-make
-f
makefile.gcc
BUILD=release
HARED=1
MONOLITHIC=1
UNICODE=1
(release
版本)
mingw32-make
-f
makefile.gcc
BUILD=debug
SHARED=1
MONOLITHIC=1
UNICODE=1
(debug
版本)
以上就是專題欄小編帶來的CodeBlocks教程,更多教程請看「http://www.zhuantilan.com/zt/CodeBlocks/」
8. 如何編譯wxWidgets
1 、打開工程 wxWidgets-2.8.7\build\msw\wx_dll.dsw ,將其轉換為 vs2005 工程關閉保存,再打開工程 wx_dll.sln 。
2 、將解決方案配置更換為 DLL Unicode Debug 。
3 、依次單獨編譯 wxregex 、 wxzlib 、 wxexpat 、 wxtiff 、 base 、 wxjpeg 、 wxpng 、 core 、 odbc 、 xml 、 adv 、 html 、 net 、 gl 、 dbgrid 、 qa 、 richtext 、 aui 、 xrc 、 media 庫。
其中目前版本 odbc 、 gl 、 dbgrid 工程並不完善,出現編譯錯誤忽略即可。
4 、如果以上順利通過,那麼將得到以下我們需要的庫文件
編譯預定義環境
wxWidgets-2.8.7\lib\vc_dll\mswud\wx\ setup.h
wxWidgets-2.8.7\lib\vc_dll\mswud\wx\msw\ rcdefs.h
wxWidgets-2.8.7\lib\vc_dll\wxbase28ud_net_vc_custom.dll
wxWidgets-2.8.7\lib\vc_dll\wxbase28ud_odbc_vc_custom.dll
wxWidgets-2.8.7\lib\vc_dll\wxbase28ud_vc_vc_custom.dll
wxWidgets-2.8.7\lib\vc_dll\wxbase28ud_xml_vc_custom.dll
wxWidgets-2.8.7\lib\vc_dll\wxmsw28ud_adv_vc_custom.dll
w xWidgets-2.8.7\lib\vc_dll\wxmsw28ud_aui_vc_custom.dll
w xWidgets-2.8.7\lib\vc_dll\wxmsw28ud_core_vc_custom.dll
wxWidgets-2.8.7\lib\vc_dll\wxmsw28ud_gl_vc_custom.dll
w xWidgets-2.8.7\lib\vc_dll\wxmsw28ud_html_vc_custom.dll
w xWidgets-2.8.7\lib\vc_dll\wxmsw28ud_media_vc_custom.dll
w xWidgets-2.8.7\lib\vc_dll\wxmsw28ud_qa_vc_custom.dll
w xWidgets-2.8.7\lib\vc_dll\wxmsw28ud_richtext_vc_custom.dll
w xWidgets-2.8.7\lib\vc_dll\wxmsw28ud_xrc_vc_custom.dll
wxWidgets-2.8.7\lib\vc_dll\wxbase28ud.lib
wxWidgets-2.8.7\lib\vc_dll\wxbase28ud_net.lib
wxWidgets-2.8.7\lib\vc_dll\wxbase28ud_xml.lib
wxWidgets-2.8.7\lib\vc_dll\wxexpatd.lib
wxWidgets-2.8.7\lib\vc_dll\wxjpegd.lib
wxWidgets-2.8.7\lib\vc_dll\wxmsw28ud_adv.lib
wxWidgets-2.8.7\lib\vc_dll\wxmsw28ud_aui.lib
wxWidgets-2.8.7\lib\vc_dll\wxmsw28ud_core.lib
wxWidgets-2.8.7\lib\vc_dll\wxmsw28ud_html.lib
wxWidgets-2.8.7\lib\vc_dll\wxmsw28ud_media.lib
wxWidgets-2.8.7\lib\vc_dll\wxmsw28ud_qa.lib
wxWidgets-2.8.7\lib\vc_dll\wxmsw28ud_richtext.lib
wxWidgets-2.8.7\lib\vc_dll\wxmsw28ud_xrc.lib
wxWidgets-2.8.7\lib\vc_dll\wxpngd.lib
wxWidgets-2.8.7\lib\vc_dll\wxregexud.lib
wxWidgets-2.8.7\lib\vc_dll\wxtiffd.lib
wxWidgets-2.8.7\lib\vc_dll\wxzlibd.lib
注意:將以上文件按照文件按照原目錄相對結構拷貝到要製作的庫路徑下,並將 wxWidgets-2.8.7\ include 目錄也拷貝到其目錄下,以後要使用只需要包含這些路徑即可。
為了以後開發方便,設定的開發庫路徑為:
wxLib\include
wxLib\Debug\mswud\wx\msw
wxLib\Debug
9. 為什麼wxWidgets靜態編譯出來的EXE文件比Delphi靜態編譯出來的EXE大很多
這個是編譯工具的事,別說是空窗口,就是空語句編譯出的大小還不一樣呢。
因為他們的編譯方法不同,具體有什麼不同就太專業了,我也說不清楚,呵呵
10. wxWidgets問題, IDE是Codeblocks。
可以,wx可以編譯成單個exe執行文件。
但前提是你的wx本身是被build編譯成靜態庫lib的版本,而非dll版本。
如果沒有,就需要找到源碼單獨編譯一遍wx。
編譯wx一般要注意是否靜態、是否unicode,是否包含c++運行庫等幾個選項。