wxWidget 릴리스 모드 빌드시 OS별 실행 문제가 발생하였습니다.

evh0106의 이미지

안녕하세요 요즘 wxWidget을 활용해 보려고 이것저것 테스트 중입니다.
예제 프로젝트를 빌드해 실행 테스트 하는 도중 문제점을 발견 하였습니다.

개발 환경은
Window7 , mingw(4.7.2), wxwidget(2.9.4), CodeBlocks(12.11)

디버그 모드로 빌드를 하고 테스트 할때에는

Window7(실행잘됨. exe실행속도 빠름)
WindowXP(실행잘됨. exe실행속도 느림)
Window2000(실행잘됨. exe실행속도 느림)

이정도로 나왔는데요. 어찌되었건 실행은 잘 되었습니다.

하지만 릴리스 모드로 할때 이상한 결과가 나왔는데요.

Window7(실행잘됨. exe실행속도 느림)
WindowXP(실행안됨)
Window2000(실행안됨)

실행이 안되는 현상은. 작업관리자에서 프로세스는 올라왔으나
CPU점유율이 높아지기만 하고 화면이 보이지 않습니다.

exe실행속도가 느린것은. 프로그램 자체가 버벅거린다는 의미는 아니고
exe를 더블클릭하면 2초정도 후에 폼이 보인다는 이야기 입니다...

두가지 질문이 있습니다.

1.릴리스 모드로 빌드시 Window Xp와 2000에서 실행이 안되는 이유
2.릴리스 모드로 빌드시 Window 7에서 exe실행 속도가 느린 이유

Visual Studo에 신물이 나서 다른 툴을 좀 활용해 보려고 노력중입니다.. 고견 주시면 고맙겠습니다.

evh0106의 이미지

글 수정이 안되나 봅니다.

window7 은 64bit 입니다.

klara의 이미지

잘 알려진 이슈가 있는게 아니라면 이걸로 답변받는건 사실상 불가능할 듯합니다.
일반적으로 디버깅모드에선 되다가 릴리즈모드에서 안되는건 작성하신 프로그램 자체에 문제가 있는 경우가 많습니다.
가장 흔한 경우가 초기화되지 않은 변수 사용입니다.
std::cout 같은 걸로 어디서 죽는지를 찾아보세요.
실행속도가 느린 것도 어디를 전후로 해서 느린건지 직접 시간을 측정해보시구요.
그렇게해서 문제가 되는 부분을 찾아내면, 그때 그부분의 내용을 포함하여 문제를 재현할 수 있는 최소한의 컴파일 가능한 코드를 짜보고 테스트해보면 스스로 문제를 찾아내거나, 적어도 의미있는 답변을 받을 수 있을 것입니다.

최악의 경우 wxWidget의 버그일 수도 있지만, 어찌되었든 구글등에서 검색해서 안나오는 문제를 파악하는 법은 이것뿐입니다.
최악이라는건 그럴리가 없다는 뜻이 아니라 이경우에는 수정하기가 힘들어서 그렇습니다.
얼마든지 라이브러리 자체에 버그가 있을 수도 있고, 실제로도 크고 작은 버그는 매우 많습니다.

evh0106의 이미지

답변 고맙습니다.
작성한 프로그램은 사실 프로젝트 만들면 처음에 생성된 코드 그대로 인 상태라..의심가는 것이 그닥 없습니다..
프로그램도 죽는다고 표현하기는 좀 그렇고요.. 프로세스상에 CPU 점유율 25%정도인 상태로 살아있습니다..
실행속도 부분은 제가 더 테스트를 해보아야 할것 같습니다.
제 생각으론 x64와 x86의 차이 같은데 프로젝트의 빌드가 잘못 된건지 wxWidgets의 빌드가 잘못 된건지..
가늠이 잘 안됩니다ㅠ

evh0106의 이미지

WindowXP(실행안됨)
Window2000(실행안됨)

이 부분이 실행이 안되는 것이 아니라 '실행이 아주 늦게 된다' 입니다.
폼이 보이지 않아서 실행이 안되는 줄 알고 taskmgr 에서 Kill을 하였는데
약 2분 후에 폼이 보였습니다.
그리고 wxWidgets 을 정적 빌드하고 exe를 빌드하면 실행이 빠릅니다.
아무래도 dll을 처음에 호출할때 느린것 같은데 이유를 모르겠습니다..
window 7하고 속도 차이가 많이 나는 것도 이해가 안가고요..

evh0106의 이미지

여러가지 테스트를 한 결과 wxWidget의 Dll이 문제인 것 같습니다.
codelite에서 제공하는 wxwidgets-295-tdm-gcc-471-32-devel 을 가지고 프로젝트를 빌드하니
실행속도가 느리거나 하는 문제가 해결되었습니다.
문제는 제가 빌드한 방식이랑 codelite에서 빌드한 방식이랑 차이점을 찾는 것인데
제가 wxWidget을 빌드할 때 명령어는
mingw32-make -f makefile.gcc UNICODE=1 SHARED=1 BUILD=release 입니다.
하지만 옵션이 중요한 것 같지는 않아 보이고

http://www.mingw.org/ 여기의 컴파일라와
http://tdm-gcc.tdragon.net/ 여기 컴파일러가 차이가 있을 것 같다는 생각이 듭니다.

시간이 오래 걸려 새로 빌드 해 보지는 않았지만 저와 같은 고민을 하신 분이 있으면 도움이 됬으면 합니다.

익명 사용자의 이미지

저도 격은 문제입니다.
사실상 빌드를 회사에서 하면 느리고 집에서 하면 상당히 빠릅니다.
회사와 집의 환경은 똑같습니다.
그런데 이상하게 회사에서만 느립니다.
회사는 login을 네트워크 서버에서 받아서 사용하고 집은 개인 권한이라는 것이 의심스럽지만 정확 하지는 않습니다.
저도 이리 처리 찾아 보는 중인데 이상하게 회사 컴퓨터에서만 느리게 빌드 되고 느리게 실행 됩니다.

mic007ks의 이미지

컴파일 속도와 프로그램 실행 속도가 현저하게 느려지거나 한참 기다려야 하는 이유를 알았습니다.
모두 백신 프로그램과 연관이 있습니다.

컴파일 할 때 백신 프로그램이 해당 프로그램의 리소스들을 전부 체크 합니다.
이때 컴파일 속도 지연이 발생합니다.

또한 프로그램 실행 하려고 할 때도 같은 이유로 실행 지연이 발생 합니다.

해결 방법은 백신 프로그램을 끄거나 검사 예외 설정을 하시면 됩니다.

댓글 달기

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