Qt 팁 - 1. Qt로 정적(static) 빌드하기
2008/09/03 11:06Qt로 짠 프로그램을 배포할 때, 특히 윈도우나 맥에서, 사용자 측에서 Qt 라이브러리가 없어서 실행하지 못하는 경우가 많습니다.
이런 경우 해결책으로 Qt를 정적링크하여 실행파일에 넣어버리는 방법이 있는데요, Qt를 정적 링크(static link)하여 이용하기위해서는, 당연히, 정적 라이브러리 파일(.a)이 필요합니다.
Qt를 설치할때, 기본값으로 동적 라이브러리를 빌드하도록 되어있기 때문에, 정적 라이브러리 파일을 이용하기 위해서는 configure단계에서 -static 옵션을 주고 Qt를 설치하여야합니다.
다만 -static옵션을 주고 그대로 make를 쳐버릴 경우, 라이브러리 파일 뿐만 아니라, 각종 툴들과 예제 및 데모까지, Qt의 모든 바이너리 파일들이 정적 링크되어 빌드되므로 Qt의 용량이 어마어마하게 늘어납니다(끝까지 해본 적이 없어서 모르겠습니다. 10기가는 넘어갑니다).
(저도 다른 데서 본거긴 하지만) 제가 추천하는 방법은, 개발할때는 동적 링크된 Qt를 이용하고, 배포할때만 Qt를 정적링크하는 것입니다.
이렇게 하기 위해서는 두가지 Qt를 빌드해야합니다.
우선 개발용으로 동적 링크해서 쓸 Qt는 일반적인 방법(-static 옵션 없이)으로 빌드하여 이용하면 됩니다.
그리고 배포용으로 정적링크해서 쓸 Qt는 우선 -static 옵션을 주고 configure한후, make할때, 'make sub-src'를 이용하는 것입니다.
이렇게 할 경우, 라이브러리만 빌드하기 때문에 빌드 시간도 짧고 용량도 그리 크게 차지하지 않습니다.
다만 이 경우엔 정말 라이브러리 외에는 아무것도 빌드하지 않기 때문에, 예를 들어 디자이너나 어시스턴트 등도 빌드되지 않습니다.
그러므로 이러한 툴이나 예제들은 위에서 말한 개발용 Qt에 포함된 녀석을 이용해야겠지요.
참고로 이렇게 빌드한 정적링크 Qt는 'make install'을 하지 말고 복사해서 쓰거나 직접 경로를 지정해서 써야합니다.
만약 make install을 실행하면, 빌드하지 않은 모든 것들을 빌드한후 복사될 것입니다.
정리하면,
이런 경우 해결책으로 Qt를 정적링크하여 실행파일에 넣어버리는 방법이 있는데요, Qt를 정적 링크(static link)하여 이용하기위해서는, 당연히, 정적 라이브러리 파일(.a)이 필요합니다.
Qt를 설치할때, 기본값으로 동적 라이브러리를 빌드하도록 되어있기 때문에, 정적 라이브러리 파일을 이용하기 위해서는 configure단계에서 -static 옵션을 주고 Qt를 설치하여야합니다.
다만 -static옵션을 주고 그대로 make를 쳐버릴 경우, 라이브러리 파일 뿐만 아니라, 각종 툴들과 예제 및 데모까지, Qt의 모든 바이너리 파일들이 정적 링크되어 빌드되므로 Qt의 용량이 어마어마하게 늘어납니다(끝까지 해본 적이 없어서 모르겠습니다. 10기가는 넘어갑니다).
(저도 다른 데서 본거긴 하지만) 제가 추천하는 방법은, 개발할때는 동적 링크된 Qt를 이용하고, 배포할때만 Qt를 정적링크하는 것입니다.
이렇게 하기 위해서는 두가지 Qt를 빌드해야합니다.
우선 개발용으로 동적 링크해서 쓸 Qt는 일반적인 방법(-static 옵션 없이)으로 빌드하여 이용하면 됩니다.
그리고 배포용으로 정적링크해서 쓸 Qt는 우선 -static 옵션을 주고 configure한후, make할때, 'make sub-src'를 이용하는 것입니다.
이렇게 할 경우, 라이브러리만 빌드하기 때문에 빌드 시간도 짧고 용량도 그리 크게 차지하지 않습니다.
다만 이 경우엔 정말 라이브러리 외에는 아무것도 빌드하지 않기 때문에, 예를 들어 디자이너나 어시스턴트 등도 빌드되지 않습니다.
그러므로 이러한 툴이나 예제들은 위에서 말한 개발용 Qt에 포함된 녀석을 이용해야겠지요.
참고로 이렇게 빌드한 정적링크 Qt는 'make install'을 하지 말고 복사해서 쓰거나 직접 경로를 지정해서 써야합니다.
만약 make install을 실행하면, 빌드하지 않은 모든 것들을 빌드한후 복사될 것입니다.
정리하면,
- 일반적인 방법으로(-static옵션 없이) Qt를 빌드
- 정적 링크용 Qt를 빌드
- configure -static [기타 옵션]
- make sub-src
- 빌드된 것을 복사해서 이용
Trackback URL : http://xylosper.net/trackback/125

