nana 모던 c++ gui 도움요청합니다

vivisection의 이미지

http://nanapro.org/en-us/
여기에서 다운받고, 압출풀고 makefile 로 libnana.a 만들었습니다

// test.cc
#include <nana/gui.hpp>
 
int main()
{
  using namespace nana;
  form fm;
  drawing{fm}.draw([](paint::graphics& graph){
      graph.string({10, 10}, L"Hello, world!", colors::red);
    });
  fm.events().click(API::exit);
  fm.show();
  exec();
}

위처럼 테스트용 소스파일을 만들고 컴파일옵션을

g++ test.cc -o a.exe -std=c++11 -m32 -mwindows -I"c:/nana/include" -L"c:/nana/build/bin" -lnana

위처럼 해서 컴파일 했는데
잘 됩니다
근데 a.exe파일 용량이 52MB 가 되는데 어디서 잘못된건지 모르겠습니다

도움요청합니다

(링크만 주루룩 올리는 이상한 답변좀 안달렷으면 합니다)

익명 사용자의 이미지

strip 으로 한번 솎아내면 어떨까요?

vivisection의 이미지

사이즈가 2.5MB 로 줄었습니다

Anti-Lock의 이미지

다운로드하신 makefile 은 디버그 심볼을 포함하여 컴파일 '-g' 하도록 되어있어서 그렇습니다.

여기에 제가 빌드한 결과를 올립니다. 참고로 하세요.

  54M  CMake_Debug/nana_test.exe*
 2.6M  CMake_Debug/nana_test_s.exe*
 2.7M  CMake_MinSizeRel/nana_test.exe*
 935K  CMake_MinSizeRel/nana_test_s.exe*
  47M  CMake_RelWithDebugInfo/nana_test.exe*
 1.2M  CMake_RelWithDebugInfo/nana_test_s.exe*
 2.8M  CMake_Release/nana_test.exe*
 1.3M  CMake_Release/nana_test_s.exe*
  13M  CMake_blank/nana_test.exe*
 2.6M  CMake_blank/nana_test_s.exe*
 198K  CMake_MSVC_Release/Release/nana_test.exe*

_s.exe 로 끝나는 실행파일은 디버깅심볼을 strip 한 것입니다.
Release 로 컴파일 한것도 strip 하니 사이즈가 줄어드는군요.

사용한 컴파일러 g++ 버전은 5.3.0 (MSYS2) 이며,
가장 아래에 있는 것은 MSVC 컴파일러 (cl ver.19) 로 컴파일 한 것입니다.

여담으로...
nana 라이브러리 사용할만 하신가요?
소스를 잠깐 보니 하부 GUI 프레임워크를 손쉽게 갈아치울수 있도록 작업이 되어 있지 않은것으로 보이네요.
그냥 윈도우냐 아니냐에 따라 프리프로세서에 의해 선택적 컴파일되도록 하드코딩? 되어 있는것 같습니다. (적어도 현재는...)
nana 프레임워크가 하부구조랑 분리되는 구조를 갖는것이 nana 개발 로드맵에 있는지 모르겠습니다만..

vivisection의 이미지

library 만 대충 훝어보면서 테스트해본 정도인데..
library 에서 c++11 문법을 사용하고, 지원하는게 좀 미흡하고, ... 그정도입니다
하부 gui 갈아치우는건 어떻게 하는건지 모르겠습니다
xml, json 같은거 쓰려면 다른 라이브러리 또 불러와야되고, socket, odbc 같은거 쓰려면 win32api 불러와야합니다
아직은 child control(widget) 용 라이브러리인것 같습니다

사용할만 하냐고 하신 질문에는 음.....
아직 만들어본 프로그램이 없어서 확답은 못드리겠는데
작은 규모의 프로젝트에선 사용할만 할 것 같습니다

그래서 지금 하는 프로젝트들 중에 작은거 하나를 이걸로 할 계획인데 이게 잘 안되면 망합니다
회사가 망하는게 아니라 제 스케쥴이 망합니다

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.