Windows下通過MinGW進行WxWidgets的動態編譯與靜態編譯


1.在Window中下載MingW

2.為MingW設置環境變量,確保在CMD中可以找到ming32-make。

3.下載wxWidgets的源碼包

4.在CMD中進入wxWidgets\build\msw,執行下面的命令進行編譯(根據自己的需要進行編譯,不用全部編譯)

MONOLITHIC=1的含義:將生成的庫文件整合的一個文件中,這個文件會很大。所以我一般將MONOLITHIC設置為0。

動態庫debug版本:

mingw32-make -f makefile.gcc  MONOLITHIC=0 SHARED=1 UNICODE=1 BUILD=debug  

動態庫release版本:

mingw32-make -f makefile.gcc  MONOLITHIC=0 SHARED=1 UNICODE=1 BUILD=release  

靜態庫release版本:

mingw32-make -f makefile.gcc  MONOLITHIC=0 SHARED=0 UNICODE=1 BUILD=release  

上面編譯完成后,會生成對應的lib庫

靜態庫文件

wxWidgets\lib\gcc_lib

靜態庫所需的頭文件,release版本在mswu中,debug版本在mswud中,因為我們沒有生成靜態庫的debug版本,所以不會出現mswud這個文件夾。

wxWidgets\lib\gcc_lib\mswu

動態庫文件

wxWidgets\lib\gcc_dll

靜態庫所需的頭文件,release版本在mswu中

wxWidgets\lib\gcc_dll\mswu

靜態庫所需的頭文件,debug版本在mswud中

wxWidgets\lib\gcc_dll\mswud

5.寫個測試文件Hello.cpp

#include <wx/wx.h>

class Simple : public wxFrame
{
public:
    Simple(const wxString& title);

};

Simple::Simple(const wxString& title)
    : wxFrame(NULL, wxID_ANY, title, wxDefaultPosition, wxSize(250, 150))
{
    Centre();
}

class MyApp : public wxApp
{
public:
    virtual bool OnInit();
};

IMPLEMENT_APP(MyApp)

bool MyApp::OnInit()
{
    Simple *simple = new Simple(wxT("Simple"));
    simple->Show(true);

    return true;
}

6.在CMD中進入Hello.cpp所在的文件夾,輸入下面的編譯命令:

動態庫(Release)版本:

g++  minimal.cpp -o minimal -I C:\MyProgram\wxWidgets-3.1.0\include -I C:\MyProgram\wxWidgets-3.1.0\lib\gcc_dll\mswu -L C:\MyProgram\wxWidgets-3.1.0\lib\gcc_dll -lwxmsw31u_xrc -lwxmsw31u_html -lwxmsw31u_adv -lwxmsw31u_core -lwxbase31u_xml -lwxbase31u_net -lwxbase31u -lwxtiff -lwxjpeg -lwxpng -lwxzlib -lwxregexu -lwxexpat -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwxregexu -lwinspool -lwinmm -lshell32 -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lwsock32 -lShlwapi -lversion

靜態庫(Release)版本:

g++  minimal.cpp -o minimal -I C:\MyProgram\wxWidgets-3.1.0\include -I C:\MyProgram\wxWidgets-3.1.0\lib\gcc_lib\mswu -L C:\MyProgram\wxWidgets-3.1.0\lib\gcc_lib -lwxmsw31u_xrc -lwxmsw31u_html -lwxmsw31u_adv -lwxmsw31u_core -lwxbase31u_xml -lwxbase31u_net -lwxbase31u -lwxtiff -lwxjpeg -lwxpng -lwxzlib -lwxregexu -lwxexpat -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwxregexu -lwinspool -lwinmm -lshell32 -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lwsock32 -lShlwapi -lversion

動態庫(Debug)版本:

g++  minimal.cpp -o minimal -I C:\MyProgram\wxWidgets-3.1.0\include -I C:\MyProgram\wxWidgets-3.1.0\lib\gcc_dll\mswu -L C:\MyProgram\wxWidgets-3.1.0\lib\gcc_dll -lwxmsw31ud_xrc -lwxmsw31ud_html -lwxmsw31ud_adv -lwxmsw31ud_core -lwxbase31ud_xml -lwxbase31ud_net -lwxbase31ud -lwxtiff -lwxjpeg -lwxpng -lwxzlib -lwxregexu -lwxexpat -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwxregexu -lwinspool -lwinmm -lshell32 -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lwsock32 -lShlwapi -lversion

※關於wxWidgets靜態庫版本必須的庫文件

靜態鏈接時需要的wxWidgets庫 (xx is wxWidgets version, such as 30):
  • libwxmswxxu_core.a
  • libwxbasexxu.a
  • libwxpng.a
  • libwxjpeg.a
  • libwxtiff.a
  • libwxzlib.a
 
靜態鏈接需要額外鏈接Windows的庫(在mingw\lib\目錄下)
  • libole32.a
  • libuuid.a
  • libcomctl32.a
  • liboleaut32.a
  • libcomdlg32.a
  • libwinspool.a
  • libgdi32.a
  • libShlwapi.a
  • libversion.a

※去除默認生成的wxWidgets程序的控制台窗口

由於編譯時使用的是控制台方式,所以生成的程序會多出一個控制台窗口,

應該使用GUI方式。解決的方法是向鏈接器ld傳入“--subsystem,windows”參數,這需要用-Wl讓gcc把這個參數傳給ld。

 

動態庫(Release)版本:

g++ -Wl,--subsystem,windows minimal.cpp -o minimal -I C:\MyProgram\wxWidgets-3.1.0\include -I C:\MyProgram\wxWidgets-3.1.0\lib\gcc_dll\mswu -L C:\MyProgram\wxWidgets-3.1.0\lib\gcc_dll -lwxmsw31u_xrc -lwxmsw31u_html -lwxmsw31u_adv -lwxmsw31u_core -lwxbase31u_xml -lwxbase31u_net -lwxbase31u -lwxtiff -lwxjpeg -lwxpng -lwxzlib -lwxregexu -lwxexpat -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwxregexu -lwinspool -lwinmm -lshell32 -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lwsock32 -lShlwapi -lversion

靜態庫(Release)版本:

g++ -Wl,--subsystem,windows minimal.cpp -o minimal -I C:\MyProgram\wxWidgets-3.1.0\include -I C:\MyProgram\wxWidgets-3.1.0\lib\gcc_lib\mswu -L C:\MyProgram\wxWidgets-3.1.0\lib\gcc_lib -lwxmsw31u_xrc -lwxmsw31u_html -lwxmsw31u_adv -lwxmsw31u_core -lwxbase31u_xml -lwxbase31u_net -lwxbase31u -lwxtiff -lwxjpeg -lwxpng -lwxzlib -lwxregexu -lwxexpat -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwxregexu -lwinspool -lwinmm -lshell32 -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lwsock32 -lShlwapi -lversion

動態庫(Debug)版本:

g++ -Wl,--subsystem,windows minimal.cpp -o minimal -I C:\MyProgram\wxWidgets-3.1.0\include -I C:\MyProgram\wxWidgets-3.1.0\lib\gcc_dll\mswu -L C:\MyProgram\wxWidgets-3.1.0\lib\gcc_dll -lwxmsw31ud_xrc -lwxmsw31ud_html -lwxmsw31ud_adv -lwxmsw31ud_core -lwxbase31ud_xml -lwxbase31ud_net -lwxbase31ud -lwxtiff -lwxjpeg -lwxpng -lwxzlib -lwxregexu -lwxexpat -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwxregexu -lwinspool -lwinmm -lshell32 -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lwsock32 -lShlwapi -lversion


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM