2013년 7월 16일 화요일

Making QT static library program for windows with MinGW


Windows 환경에서 QT 프로그램 정적 라이브러리로 만들기

static library로 생성되지 않는 2가지 이유
  1. 자신의 프로젝트를 컴파일 할 때 gcc dll 타입으로 컴파일 된다. 
  2. qt 자체가 dll 타입으로 컴파일된 파일들이 설치된다.  
위에서 언급한 내용들은 필요한 모든 dll 파일을 찾아서 동일한 폴더에 복사하면 실행된다.

하지만 우리가 원하는 것은 간단한 프로그램을 만들어서 쉽게 복사 실행하는 배포판을 만들 수 있는 단일 실행 프로그램이다. 따라서 다음 해결 방법이 필요하다.

1번은 가장 쉽게 해결되는데, 자신의 프로젝트 파일에 *.pro 다은 문장을 삽입하면 된다.

     QMAKE_CFLAGS_DEBUG += static 
     QMAKE_CFLAGS_RELEASE += static  
     QMAKE_LFLAGS += -static -static-libgcc -static-libstdc++ 

 rebuild All 을 실행해보면 파일 사이즈가 약간 커지고 QT관련 라이브러리를 찾는 에러만 발생한다.
적용 전


적용 후



 마지막으로 2번이 조금 까다로울 수도 있는데 인터넷을 검색해보면 대부분 ‘-static’ 옵션을 주라는 문서들만 보인다. 하지만 따라해 보아도 실행이 안되고 옵션이 먹히지 않아서 무슨 뜻인가 했는데 사이트들을 조금 더 뒤져보니 HowTo 문서보고 정확히 이해 할 수 있었다.

  qt-project HowToDocument 

 결국 mingw-32 or 64를 통해서 새롭게 static으로 만들어야 한다는 것이다.

  1. 우선 설치된 sdk 파일을 복사해서 적당한 폴더명으로 만들고, 
    1. c:\Qt\4.8.4\ -> c:\Qt\4.8.4_static 
  2. 컴파일러가 있는 곳을 path로 지정하고, 
    1. set PATH=%PATH%;C:\MinGW\bin 
  3. 컴파일할 파일이 있는 곳으로 이동하고, 
    1. cd c:\Qt\4.8.4_static 
  4.  make file을 생성한다. 
    1. configure -static -release -no-exceptions  /* 변경가능한 옵션*/ 
  5. 마지막으로 make를 실행한다.
    1.  mingw32-make sub-src 

 시간을 좀(2시간이상) 걸린다. 하지만 한번 쯤 해보면 쉽게 이해할 수 있다.
 (컴파일 오류에 관한 내용은 개인이 알아서 해결하길 바람)

진짜 마지막 작업은 IDE에서 새롭게 컴파일된 qmake을 적절히 연결하는 것뿐이다.  자세한 사항은 참고 사이트를 확인하길 바람.

(혹시나 잘 모를 사람을 위해서 추가)
1. 새롭게 빌드한 qt 추가

2. 새롭게 빌드한 qt등록

3. 새롭게 빌드한 qt사용
(add kit)를 눌러서 추가


여기서 주의할 점은 우리가 -release 옵션으로 빌드하였기 때문에 
projects 속성에서 qmake release를 선택해야한다. 
옵션으로 "CONFIG+=static"을 추가하여도 되며, *.pro 파일에 추가하여도 된다.

빌드된 폴더를 열어보면 사이즈가 적용할 때마다 조금 더 커진 실행 파일이 생성된다.

Size 비교
 최초 컴파일
1번 적용
 2번 적용

Example 


오랜만에 글쓸려니 힘드네 ㅜㅜ

댓글 없음:

댓글 쓰기