我創建一個簡單的(世界,你好!)C++使用wxDev-C++ IDE用一個非常簡單的GUI(僅適用於無元素的幀)應用程序(在Windows 7的)。
問題是輸出.exe文件的該尺寸過大(2MB左右,當我編譯使用MSVC10編譯&更多的8MB,當我使用GCC編譯&這些尺寸是最好的情況下!)。
我已經檢查了很多可能性(例如排除調試信息或優化大小),但其中沒有一個對於減小可執行文件大小沒有幫助。
我強烈猜測存在鏈接問題,因爲我看過一個demo application,它包含幾乎所有的小部件,只有大約1MB的代碼大小。
有什麼想法?過大的可執行文件的大小
1
A
回答
0
當你將整個內容打包到一個exe文件中時,你期望什麼? (靜態)
基於許多因素的編譯.exe文件的大小。但是如果你將它編譯爲靜態的,你創建的是最大的。
這裏是例如一個wxWidgets應用程序。編譯兩次。一個用VC2010,另一個用minGW。
動態編譯與VS2010的WinXP 127.488 KB
動態編譯使用MinGW的gcc的WinXP 1.018.639 KB
你寫道:
about 2MB when I compile using MSVC10 compiler & more that 8MB when I use GCC compile & these sizes are best cases!.
只要我們可以看到任何make文件。或其他設置,這裏很難提供幫助。
向上述結果,可以看出,有可能產生具有僅128.000 KB一個WX應用。
dtx02.cpp
#include "dtx02.h"
///////////////////////////////////////////////////////////////////////////
dxDialog::dxDialog(wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style) : wxDialog(parent, id, title, pos, size, style)
{
this->SetSizeHints(wxDefaultSize, wxDefaultSize);
wxBoxSizer* bSizer2;
bSizer2 = new wxBoxSizer(wxVERTICAL);
m_button1 = new wxButton(this, ID_SHOWMESSAGE, wxT("&Show a message"), wxDefaultPosition, wxDefaultSize, 0);
bSizer2->Add(m_button1, 0, wxALL, 5);
m_button2 = new wxButton(this, wxID_OK, wxT("&Close"), wxDefaultPosition, wxDefaultSize, 0);
bSizer2->Add(m_button2, 0, wxALL, 5);
m_notebook1 = new wxNotebook(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0);
m_panel1 = new wxPanel(m_notebook1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);
m_panel1->SetBackgroundColour(wxSystemSettings::GetColour(wxSYS_COLOUR_BTNFACE));
m_notebook1->AddPage(m_panel1, wxT("a page"), true);
m_panel2 = new wxPanel(m_notebook1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL);
m_notebook1->AddPage(m_panel2, wxT("a page"), false);
bSizer2->Add(m_notebook1, 1, wxEXPAND | wxALL, 5);
this->SetSizer(bSizer2);
this->Layout();
this->Centre(wxBOTH);
// Connect Events
this->Connect(wxEVT_CLOSE_WINDOW, wxCloseEventHandler(dxDialog::OnClosex));
m_button1->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(dxDialog::OnShowMessage), NULL, this);
m_button2->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(dxDialog::OnClose), NULL, this);
}
dxDialog::~dxDialog()
{
// Disconnect Events
this->Disconnect(wxEVT_CLOSE_WINDOW, wxCloseEventHandler(dxDialog::OnClosex));
m_button1->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(dxDialog::OnShowMessage), NULL, this);
m_button2->Disconnect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(dxDialog::OnClose), NULL, this);
}
dtx02App.cpp
#include "dtx02App.h"
#include "dtx02dxDialog.h"
IMPLEMENT_APP(dtx02App)
dtx02App::dtx02App()
{
}
dtx02App::~dtx02App()
{
}
bool dtx02App::OnInit()
{
dtx02dxDialog* dialog = new dtx02dxDialog((wxWindow*)NULL);
dialog ->Show();
SetTopWindow(dialog);
return true;
}
dtx02dxDialog.cpp
#include "dtx02dxDialog.h"
dtx02dxDialog::dtx02dxDialog(wxWindow* parent)
:
dxDialog(parent)
{
}
void dtx02dxDialog::OnClosex(wxCloseEvent& event)
{
wxTheApp->Exit();
}
void dtx02dxDialog::OnShowMessage(wxCommandEvent& event)
{
wxMessageBox(wxT("wxFormBuilder Tut"));
}
void dtx02dxDialog::OnClose(wxCommandEvent& event)
{
wxTheApp->Exit();
}
1
這裏有您需要按照減少靜態鏈接wxWidgets的大小的步驟使用mingw的應用程序:
1.Compile使用下列選項庫:
-ffunction截面-fdata截面-Os
這將會把每個功能或數據項到自己的部分。
2。鏈接可執行文件到圖書館使用下列選項:
輪候冊, - GC-部分-s
符號和未使用的功能和數據段將被刪除。
使用這些選項,生成的可執行文件大小將約爲3.3 MB。當然,這意味着你必須自己編譯庫,而不是使用預編譯的二進制文件。我用下面的bat文件編譯庫:
cd C:\wxWidgets\build\msw
mingw32-make SHELL=CMD.exe -j4 -f makefile.gcc BUILD=release UNICODE=1 SHARED=0 clean
mingw32-make SHELL=CMD.exe -j4 -f makefile.gcc CPPFLAGS="-MD -MP -DHAVE_W32API_H -D__WXMSW__ -DNOPCH -DwxDEBUG_LEVEL=0 -DNDEBUG" CFLAGS="-mthreads -pipe -fmessage-length=0 -ffunction-sections -fdata-sections -fno-builtin -Os" CXXFLAGS="-mthreads -Wno-ctor-dtor-privacy -pipe -fmessage-length=0 -ffunction-sections -fdata-sections -fno-builtin -Os" LDFLAGS="-Wl,--subsystem,windows -Wl,--gc-sections -s -mthreads -mwindows" BUILD=release UNICODE=1 SHARED=0
此外,我建議你使用的代碼::塊或Qt Creator的替代wxDev。我個人使用Qt Creator。它有一個偉大的編輯器,QMake使事情變得更容易。
相關問題
- 1. 可執行文件的大小?
- 2. 大會對C的可執行文件的大小
- 3. 減少pyinstaller可執行文件大小
- 4. armv7s可執行文件大小增加
- 5. .net執行文件的大小最小?
- 6. 減少可執行文件大小的過程
- 7. iPhone上的最大可執行文件大小?
- 8. 最小的PC/Mac可執行文件的大小?
- 9. 從py2exe減小可執行文件的大小
- 10. 如何縮小Clozure Common Lisp可執行文件的大小?
- 11. 鏈接後最小的可執行文件大小
- 12. ios iPA unix可執行文件大小5MB太大
- 13. 爲什麼要更改結構大小,更改可執行文件的大小?
- 14. 如何獲取庫/可執行文件的可執行代碼段的大小?
- 15. 可疑的靜態鏈接可執行文件大小
- 16. 文件大小過大
- 17. 一個大的可執行文件或很多小的DLL?
- 18. Delphi 7和Delphi 2010的區別可執行文件的大小?
- 19. 什麼決定我的可執行文件的大小?
- 20. 減少GHC生成的可執行文件的大小
- 21. 爲什麼Haskell/GHC可執行文件在文件大小上如此之大?
- 22. 全局變量如何影響可執行文件的大小?
- 23. Visual Studio 2010中生成的可執行文件大小
- 24. 可執行文件夾上的非法密鑰大小
- 25. 如何使用枚舉增加可執行文件的大小?
- 26. 'size'vs'ls -l'來獲取可執行文件的大小
- 27. 什麼會影響Delphi可執行文件的大小?
- 28. 一個可執行文件如何可以在文件大小這麼小?
- 29. 可執行文件大小是否可以優化?
- 30. 爲什麼可執行文件的文件大小比不帶include的.cpp源文件大?
靜態或動態鏈接? – 2013-04-06 17:33:05
當然是靜態的 – 2013-04-06 17:35:28