wxDev-C++ IDE를 사용하여 매우 간단한 GUI (요소가없는 프레임 만)로 C++ 응용 프로그램을 간단하게 만듭니다. 윈도우 7).
문제는 출력 .exe 파일의 크기가 너무 큽니다 (GCC 컴파일을 사용할 때 &을 사용하여 컴파일 할 때 약 2MB입니다. GCC 컴파일을 사용할 때이 크기가 가장 좋습니다!).
디버그 정보를 제외하거나 크기를 최적화하는 등 여러 가지 가능성을 확인했지만 실행 가능 크기를 줄이는 데 도움이되지는 않습니다.
코드 크기가 약 1MB 인 거의 모든 위젯을 포함하고있는 demo application을 본 적이 있기 때문에 링크 문제가 있다고 생각합니다.
아이디어가 있으십니까?wxDev-C++에서 GCC 또는 MSVC 컴파일러를 사용할 때 너무 큰 실행 파일 크기
1
A
답변
0
전체 내용을 하나의 exe 파일로 압축하면 무엇을 기대 했습니까? (정적)
많은 요인에 따라 컴파일 된 .exe 파일의 크기입니다. 그러나 정적으로 컴파일하면 가장 큰 것을 만듭니다.
예를 들어 wxWidgets 응용 프로그램입니다. 두 번 컴파일. 하나는 VC2010이고 다른 하나는 minGW입니다. VS2010 WINXP 127.488 KB와 함께 동적 컴파일
는
는 MinGW gcc가 WINXP 1.018.639 KB와 함께 동적 컴파일당신이 쓴 :
,549,321 0
우리는 모든 파일을 볼 수있는 한. 또는 다른 설정, 여기에 도움이 어렵습니다.
위의 결과에 따르면 128,000KB의 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:
이 -Os
-ffunction 섹션 -fdata 섹션은 자체 섹션에 각 함수 또는 데이터 항목을 배치합니다.
2.다음 옵션을 사용하여 라이브러리에 실행 파일을 링크 :
는-Wl은 - GC-섹션
기호 및 사용되지 않는 기능을 -s 및 데이터 섹션이 제거됩니다.
이러한 옵션을 사용하면 생성 된 실행 파일 크기는 약 3.3MB가됩니다. 물론 이것은 미리 작성된 바이너리 대신에 직접 라이브러리를 컴파일해야한다는 것을 의미합니다. 나는 라이브러리를 컴파일하려면 다음과 박쥐 파일을 사용했다 :
또한 당신이 코드 :: 블록 또는 대신 wxDev의 Qt는 창조주를 사용하는 것이 좋습니다. 저는 개인적으로 Qt Creator를 사용합니다. 훌륭한 편집기와 QMake를 사용하면 더 쉽게 작업 할 수 있습니다.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
관련 문제
- 1. 파일 :이 (GCC 컴파일러를) 컴파일
- 2. 재생 프레임 워크 : 너무 큰 실행 파일
- 3. ActiveRecord ArgumentError : 음수 문자열 크기 (또는 너무 큰 크기)
- 4. GCC 출력 MSVC 스타일 오류
- 5. MSVC 2015가 너무 많은 공간을 차지하는 이유
- 6. 이클립스에 너무 큰 파일
- 7. gcc 컴파일러를 찾을 수 없습니다.
- 8. 너무 큰 Jar 파일
- 9. 컴파일 오류 GCC 건물하지만 MSVC
- 10. MonoTouch : gcc 컴파일러를 찾지 못했습니다.
- 11. 파일 너무 큰 파이썬
- 12. VFPOLEDB 너무 큰 파일
- 13. GCC 컴파일러를 웹 서버에 연결하기
- 14. py2exe에서 실행 파일 크기 줄이기
- 15. lubuntu에서 gcc 컴파일러를 사용하여 실행합니다.
- 16. POS = ... pgi 컴파일러를 사용할 때
- 17. 크기 조정 이미지를 단 경우 너무 큰
- 18. SMTP를 사용할 때 첨부 파일 크기 제한
- 19. FoxPro OleDbException : 너무 큰 파일
- 20. GCC 전 처리기 non-C 파일 실행
- 21. 다중 스레드 프로그래밍을 위해 gcc 컴파일러를 사용할 때 "-pthread"플래그가 켜져 있어야합니다.
- 22. GCC 컴파일러를 사용하여 ActiveX와 통신하기
- 23. 컴파일러를 GCC 3.4.2에서 GCC 4.4.2로 또는 ICC로 전환 할 때주의해야 할 사항은 무엇입니까?
- 24. GCC 컴파일러를 어떻게 실행 파일을 서브 폴더에 저장하도록 설정합니까?
- 25. Android Webview - 너무 큰 이미지 크기 조정
- 26. 비 MSVC 컴파일러를 사용하여 Windows에서 유니 코드 파일 이름을 사용하여 fstream 열기
- 27. C로 큰 파일 크기 가져 오기
- 28. 큰 파일 업로드가 너무 느립니다.
- 29. GCC 컴파일을 실행 하시겠습니까?
- 30. 하스켈/GHC 실행 파일이 파일 크기가 너무 큰 이유는 무엇입니까?
정적 또는 동적 연결? –
물론 정적 –