2014-10-07 55 views
0

如何使用wxWidgets构建独立的exe文件?我使用C++和代码块:如何构建独立的exe文件wxWidgets

+0

就像任何其他应用程序,wxWidgets的只是一个图书馆,一个忠告,链接库动态而不是静态的,都带有静态连接各种奇怪的崩溃.. – Nim 2014-10-07 15:36:47

+0

你总是可以静态地将库链接到最终的可执行文件。 – PeterT 2014-10-07 15:37:17

+0

我该怎么做?我是一个wxwidgets的新手:( – Jessie 2014-10-07 16:36:02

回答

1

下面是你需要建立代码::块

http://wiki.codeblocks.org/index.php?title=Compiling_wxWidgets_3.0.0_to_develop_Code::Blocks_(MSW)

要建立一个单一的静态库与您的程序链接wxWidgets库的说明

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

结果应该与此类似:

Directory of J:\wxWidgets-src-3.0.1\lib\gcc_lib 

09/10/2014 12:45 PM <DIR>   . 
09/10/2014 12:45 PM <DIR>   .. 
09/10/2014 12:45 PM   202,752 libwxexpat.a 
09/10/2014 12:45 PM   151,230 libwxjpeg.a 
09/10/2014 12:45 PM  48,398,492 libwxmsw30u.a 
09/10/2014 12:45 PM   223,374 libwxmsw30u_gl.a 
09/10/2014 12:44 PM   227,850 libwxpng.a 
09/10/2014 12:44 PM   81,428 libwxregexu.a 
09/10/2014 12:45 PM   2,830,642 libwxscintilla.a 
09/10/2014 12:45 PM   454,846 libwxtiff.a 
09/10/2014 12:44 PM   86,432 libwxzli 

下面是一个最小的wxWidgets的GUI应用程序

#include <wx/wx.h> 
#include <wx/app.h> 

class cApp : public wxApp 
{ 
public: 
    virtual bool OnInit(); 

}; 

class cFrame: public wxFrame 
{ 
public: 
    cFrame(wxFrame *frame, const wxString& title) 
     : wxFrame(frame, -1, title, wxPoint(-1,-1),wxSize(600,600)) 
     { 

     } 
}; 

IMPLEMENT_APP(cApp); 

bool cApp::OnInit() 
{ 
    cFrame* frame = new cFrame(0L, _("wx Starter")); 
    frame->Show(); 

    return true; 
} 

的源代码保存为starter.cpp

下面是代码::块项目,以建立该应用程序。有三个目标:使用共享库(DLL)的Debug和Release,以及使用静态库的发布版本(全部在一个可执行文件中)。

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> 
<CodeBlocks_project_file> 
    <FileVersion major="1" minor="6" /> 
    <Project> 
     <Option title="starter" /> 
     <Option pch_mode="2" /> 
     <Option compiler="gcc" /> 
     <Build> 
      <Target title="Debug"> 
       <Option output="bin/starter" prefix_auto="1" extension_auto="1" /> 
       <Option object_output="obj/Debug/" /> 
       <Option type="0" /> 
       <Option compiler="gcc" /> 
       <Compiler> 
        <Add option="-std=c++11" /> 
        <Add option="-g" /> 
       </Compiler> 
       <Linker> 
        <Add library="wxbase30u" /> 
        <Add library="wxmsw30u_core" /> 
        <Add directory="$(#wxwidgets.lib)" /> 
       </Linker> 
      </Target> 
      <Target title="Release"> 
       <Option output="bin/starter" prefix_auto="1" extension_auto="1" /> 
       <Option object_output="obj/Release/" /> 
       <Option type="0" /> 
       <Option compiler="gcc" /> 
       <Compiler> 
        <Add option="-O2" /> 
       </Compiler> 
       <Linker> 
        <Add option="-s" /> 
        <Add library="wxbase30u" /> 
        <Add library="wxmsw30u_core" /> 
        <Add directory="$(#wxwidgets.lib)" /> 
       </Linker> 
      </Target> 
      <Target title="Static"> 
       <Option output="bin/starter_static" prefix_auto="1" extension_auto="1" /> 
       <Option object_output="obj/Release/" /> 
       <Option type="0" /> 
       <Option compiler="gcc" /> 
       <Compiler> 
        <Add option="-O2" /> 
       </Compiler> 
       <Linker> 
        <Add option="-s" /> 
        <Add library="wxmsw30u" /> 
        <Add library="wxpng" /> 
        <Add library="wxzlib" /> 
        <Add library="ole32" /> 
        <Add library="Comctl32" /> 
        <Add library="uuid" /> 
        <Add library="OleAut32" /> 
        <Add library="Winspool" /> 
        <Add directory="$(#wxwidgets_static.lib)" /> 
       </Linker> 
      </Target> 
     </Build> 
     <Compiler> 
      <Add option="-std=c++11" /> 
      <Add directory="$(#wxwidgets.include)" /> 
      <Add directory="$(#wxwidgets.setup)" /> 
     </Compiler> 
     <Unit filename="starter.cpp" /> 
     <Extensions> 
      <code_completion /> 
      <envvars /> 
      <debugger /> 
     </Extensions> 
    </Project> 
</CodeBlocks_project_file> 

将其作为starter.cbp保存在同一个文件夹中。当你打开它时,你会被提示设置所需的全局变量,指向你建立库的文件夹。这样做一次,它将适用于所有的项目。

enter image description here

+0

我构建了这个静态库,但是现在我无法构建我的项目,为了编译这个文件,我删除了已编译的wxWidgets,但是我做错了什么? – Jessie 2014-10-09 14:38:05

+0

它缺少wxmsw30u_gcc_cd.dll,我该怎么办?我在编译之前编译过的wxWidgets,并且我遵循链接中的步骤,并用代码替换了构建代码。请帮助。 – Jessie 2014-10-09 14:45:27

+0

我应该在链接器设置中更改什么?我应该查看哪个文件对于它?我在链接器设置下的全局编译器设置,但我不知道我应该链接到什么文件。 – Jessie 2014-10-09 15:01:14

相关问题