[해결]wxWidgets으로 만든 프로그램의 크기를 더 줄일 수는 없나요?

noblepylon의 이미지

wxWidgets으로 간단한 프로그램을 하나 만들었습니다.
이걸 WindowsXP와 우분투에서 각각 빌드했는데 실행파일 크기가 정말 하늘과 땅 차이이군요.
Windows에서 빌드한 건 무려 2.3MB인데
우분투에서 한 건 겨우 50KB였습니다.

컴파일러는 gcc를 사용했고, 빌드 옵션은 -s -O3 -Os입니다.
(윈도에서는 MinGW사용)

1. 왜 이러한 차이가 생기는 것일까요?
2. 실행파일 크기를 어떻게 줄일 수 있을까요?

ps. 프로그램은 다음 링크에서 받을 수 있습니다.
Linux용 실행파일
Windows용 실행파일

d3m3vilurr의 이미지

리눅스에서는 wxWidget이 동적링크된거고, 윈도에서는 정적링크된것 아닌가요?
wxWidget 을 깔지않아도 돌아가는지를 확인해보면 되겠죠.

noblepylon의 이미지

분명히 옵션에서 정적링크를 하도록 했는데도 50KB밖에 되지 않았습니다.
---
"The truth will make you free."(John 8:32)
"I am the way, and the truth, and the life: no one comes to the Father but through Me."(John 14:6)

---
“내게 능력주시는 자 안에서 내가 모든 것을 할 수 있느니라.”(빌립보서 4:13)

klara의 이미지

동적인 경우엔 1kB에 정적일때 50kB라면 몰라도, 정적링크를 하도록 했는데 동적인 경우와 변함이 없다면 제대로 정적링크가 안됬을 듯하네요.
올리신 바이너리 받아서 실행해봐도, libwx_gtk2u_richtext-2.8.so.0를 못찾는다고 뜨는 걸로 봐도 그렇구요.
참고로 정적링크를 할려면 정적라이브러리파일이 필요합니다. 정적링크 옵션만 준다고 없는 라이브러리를 넣을순 없으니까요.
동적라이브러리파일을 .so이고, 정적파일은 .a지요. 정적라이브러리파일을 가지고 있는지 확인해보세요.

참고로 바이너리파일을 압축해주는 프로그램은 여럿 있습니다. 가장 유명한건 upx인데, 문제라고 하긴 뭐한데, 종종 upx로 압축된 바이너리파일을 무조건 해킹툴이나 바이러스등으로 진단하는 백신들이 있습니다. 파일을 위장하기위해서 실행파일을 압축하는 경우가 많거든요.

noblepylon의 이미지

2.3MB였던 실행파일이 단숨에 630KB로 줄었습니다^^
이걸 자주 애용해야 겠군요.

ps. 리눅스에서도 정적링크를 하면 파일 크기가 2.3MB로 늘어나는 것을 확인했습니다.
---
"The truth will make you free."(John 8:32)
"I am the way, and the truth, and the life: no one comes to the Father but through Me."(John 14:6)

---
“내게 능력주시는 자 안에서 내가 모든 것을 할 수 있느니라.”(빌립보서 4:13)

bushi의 이미지

정적링크는 라이센스에 주의하세요.
glibc 는 LGPL 이고, 정적링크에 대해서는 GPL 과 같은 수준의 대접을 해줘야합니다.
wxWidgets(wxWindows) 의 라이센스는 LGPL 에 기반한 변종입니다.

OTL

noblepylon의 이미지

wxWidgets는 non-GPL에 정적링크될 수 있다고 알고 있습니다.
그런데 glibc는 어떤 일을 하나요?
---
"The truth will make you free."(John 8:32)
"I am the way, and the truth, and the life: no one comes to the Father but through Me."(John 14:6)

---
“내게 능력주시는 자 안에서 내가 모든 것을 할 수 있느니라.”(빌립보서 4:13)

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.