我编写了一个最小的wxWidgets应用程序:
stdafx.h中
#define wxNO_REGEX_LIB
#define wxNO_XML_LIB
#define wxNO_NET_LIB
#define wxNO_EXPAT_LIB
#define wxNO_JPEG_LIB
#define wxNO_PNG_LIB
#define wxNO_TIFF_LIB
#define wxNO_ZLIB_LIB
#define wxNO_ADV_LIB
#define wxNO_HTML_LIB
#define wxNO_GL_LIB
#define wxNO_QA_LIB
#define wxNO_XRC_LIB
#define wxNO_AUI_LIB
#define wxNO_PROPGRID_LIB
#define wxNO_RIBBON_LIB
#define wxNO_RICHTEXT_LIB
#define wxNO_MEDIA_LIB
#define wxNO_STC_LIB
#include <wx/wxprec.h>
Minimal.cpp
#include "stdafx.h"
#include <memory>
#include <wx/wx.h>
class Minimal : public wxApp
{
public:
virtual bool OnInit();
};
IMPLEMENT_APP(Minimal)
DECLARE_APP(Minimal)
class MinimalFrame : public wxFrame
{
DECLARE_EVENT_TABLE()
public:
MinimalFrame(const wxString& title);
void OnQuit(wxCommandEvent& e);
void OnAbout(wxCommandEvent& e);
};
BEGIN_EVENT_TABLE(MinimalFrame, wxFrame)
EVT_MENU(wxID_ABOUT, MinimalFrame::OnAbout)
EVT_MENU(wxID_EXIT, MinimalFrame::OnQuit)
END_EVENT_TABLE()
MinimalFrame::MinimalFrame(const wxString& title)
: wxFrame(0, wxID_ANY, title)
{
std::auto_ptr<wxMenu> fileMenu(new wxMenu);
fileMenu->Append(wxID_EXIT, L"E&xit\tAlt-X",
L"Terminate the Minimal Example.");
std::auto_ptr<wxMenu> helpMenu(new wxMenu);
helpMenu->Append(wxID_ABOUT, L"&About\tF1",
L"Show the about dialog box.");
std::auto_ptr<wxMenuBar> bar(new wxMenuBar);
bar->Append(fileMenu.get(), L"&File");
fileMenu.release();
bar->Append(helpMenu.get(), L"&Help");
helpMenu.release();
SetMenuBar(bar.get());
bar.release();
CreateStatusBar(2);
SetStatusText(L"Welcome to wxWidgets!");
}
void MinimalFrame::OnAbout(wxCommandEvent& e)
{
wxMessageBox(L"Some text about me!", L"About", wxOK, this);
}
void MinimalFrame::OnQuit(wxCommandEvent& e)
{
Close();
}
bool Minimal::OnInit()
{
std::auto_ptr<MinimalFrame> mainFrame(
new MinimalFrame(L"Minimal wxWidgets Application"));
mainFrame->Show();
mainFrame.release();
return true;
}
这个最小程序的重量为2.4MB! (可执行压缩将此降低到半个MB左右,但仍然很大!)(我必须静态链接,因为此应用程序需要单二进制xcopy部署,因此C运行时和wxWidgets本身都设置为静态链接)
有关削减此功能的任何提示吗? (我正在使用Microsoft Visual Studio 2010)
答案 0 :(得分:2)
您还可以使用标记/01
将MSVC设置为针对较小的二进制大小进行编译(但这可能会影响性能)。见here。还要记住,wxWidgets需要这样编译才能产生任何影响。
我认为静态链接应用程序的2.4 MB相当不错恕我直言......
更新:wxWidgets wiki on executable size可能会带来一些安慰......
答案 1 :(得分:1)
您应该通过将wxUSE_XXX
中的大部分include/wx/msw/setup.h
设置为0来禁用所有不需要的功能。但即便如此,您仍然不会有接近90KB的任何内容。
wxWidgets根本就没有针对大小进行优化,所以如果这是你的主要关注点,那么它可能不适合你(除非你想自己做一些工作,当然,这是非常受欢迎的)。然而,在实践中,它从来不是一个问题,除了可能,对于一个极少数人。
答案 2 :(得分:1)
尝试按如下方式添加链接器开关:
/FILEALIGN:512 /OPT:REF /OPT:ICF /INCREMENTAL:NO
这会减少可执行文件的大小。
对于C ++中的简单hello world程序,如果要从命令行编译,请输入以下命令:
cl /MT /O1 main.cpp /link /FILEALIGN:512 /OPT:REF /OPT:ICF /INCREMENTAL:NO /OUT:test.exe
如果您尝试检查可执行文件,您会发现现在的尺寸要小得多。