한국어
Qt
 
환경: 윈도우7, Qt5.10
 
기본적으로 qt.io에서 배포된 Qt는 사전 빌드된 라이브러리들이 동적으로 링크된다. 즉, 응용프로그램이 실행 될때 사전 빌드된 DLL을 동적으로 참조한다.
문제는 이런 환경에서 개발된 응용프로그램은 배포시 문제가 발생하는데 Qt가 설치되어있지 않은 환경에서는 응용프로그램 자체만으로 실행이 불가능하기 때문에 필요한 dll 을 함께 패키지로 배포해야한다는 점이다. 
정적으로 빌드하게 되면 응용프로그램에 필요한 라이브러리들이 함께 링크되어 하나의 바이너리가 만들어 지므로 편리하게 배포할 수 있다. 또 응용프로그램 하나만 있는 경우 실제로 사용되는 Qt 코드만 링크되기 때문에 배포된 전체 크기가 동적 버전의 묶음보다 비교해서 더 작다는 장점이있다.
 
유의 해야할점은 Qt가 정적으로 링크되어 배포될 때 라이센스 문제가 있다는 것이다. 오프소스 프로젝트가 아니라면 반드시 라이센스 문제를 확인해야한다.
 
이렇게 응용프로그램을 정적 실행환경으로 만드려면 정적 버전의 Qt가 필요하다.
파워쉘 스크립트를 이용한 방법이 있고 파워쉘 버전 3.0이상에서 가능하다.
windows7은 보통 파워쉘 버전 2.0대여서 업데이트를 해줘야하지만 필자의 경우 (이상하게)업데이트 설치파일이 실행이 안되서 그냥 아래의 방법으로 진행하였다.

 

(윈도우7 이상은 파워쉘 버전이 3.0이상이므로 스크립트를 사용하면 편리할듯하다.)
 
Qt5.10다운로드 및 설치
온라인 인스톨러 다운로드 후 5.10(소스코드포함) 및 MinGW5.3.0을 체크하여 설치한다. (기본 C:\ 에 설치한다.)
install_qt.png

 

설치후에

C:\Qt 밑에 "static" 폴더 생성
C:\Qt\static 밑에 "5.10.0" 폴더 생성

 

C:\Qt\5.10.0 의 "src" 폴더를 "static" 에 복사
C:\Qt\Static\Src\qtbase\mkspecs\win32-g++ 폴더에 있는 qmake.conf 파일을 에디터로 열고 마지막에 아래 내용을 추가해준다.
QMAKE_LFLAGS += -static -static-libgcc
QMAKE_CFLAGS_RELEASE -= -O2
QMAKE_CFLAGS_RELEASE += -Os -momit-leaf-frame-pointer
DEFINES += QT_STATIC_BUILD
 
CMD를 실행 하고 환경 변수 등록
set Path=C:\Qt\Tools\mingw530_32\bin;%PATH%
 
CMD에서 "C:\Qt\Static\Src"로 이동한 후 Configure
configure -static -release -platform win32-g++ -prefix C:\Qt\Static\5.10.0 -qt-zlib -qt-pcre -qt-libpng -qt-libjpeg -qt-freetype -opengl desktop -no-openssl -opensource -confirm-license -make libs -nomake tools -nomake examples -nomake tests


아래 명령으로 빌드 및 설치를 실행한다. (두번째 명령은 경우에 따라 몇시간이 걸린다.)

mingw32-make -k -j4
mingw32-make -k install


필자의 경우 위 명령 중 python 의존성 에러가 발생하였다

"Project ERROR: Building QtQml requires Python."

python_error.png

 

혹시 위와 같은 에러가 발생한 경우 python도 설치한다.

설치 시 "Add Python 3.6 to PATH" 체크

파이썬 설치후에는 cmd를 새로 열고 위에서 했던 환경변수 설정부터 다시 해주자.

install_python.png

 

모든 컴파일 및 설치가 완료된 후

C:\Qt\Static\5.10.0\mkspecs\win32-g++ 폴더의 qmake.conf 를 에디터로 열고 마지막에 아래 내용을 추가한다.

CONFIG += static

 

QtCreator를 열고 Tools - Options - Build & Run - Qt Vesions의 add 를 클릭하여

C:\Qt\Static\5.10.0\bin\qmake.exe 를 추가 시켜준다.

Kits 탭으로 이동하여 add를 클릭하고 방금 추가 시켜준 qmake를 선택하고 컴파일러는 C:\Qt\Tools에 설치된 것으로 선택한다.

kits.png

 

이제 새 프로젝트를 생성하거나 기존 프로젝트를 열어 방금 추가해준 Kit으로 선택하여 qmake - Build를 하면 꾀 용량이 큰 exe실행 파일이 만들어진다.

번호 제목 글쓴이 날짜 조회 수
공지 Qt프로그래밍(QtQuick) Beginner를 위한 글 읽는 순서 운영자 2019.01.05 85896
59 QMake 프로젝트를 CMake 프로젝트로 변환 with qmake2cmake makersweb 2022.09.17 1001
58 Qt로 XML 파싱 : Qt 6에서 업데이트된 (Parsing XML with Qt: Updates for Qt 6) [1] j2doll 2020.01.16 979
57 Qt 6.0의 개발 호스트 및 대상 플랫폼 makersweb 2020.09.16 976
56 [Qt] Google Play의 향후 요구 사항을 준수하는 방법 [2] j2doll 2019.07.29 975
55 Qt 6에서 QList 변경사항 makersweb 2020.10.08 975
54 Qt기반의 서버와 클라이언트간 SOAP(Simple Object Access Protocol) file makersweb 2020.05.11 972
53 Qt MQTT 에 대해서 file makersweb 2020.06.02 959
52 Qt 5.15 및 Qt 6의 출시 일정 makersweb 2020.04.09 932
51 Qt 5 코드를 Qt 6로 포팅하기 위해 도움이 되는 Clazy Framework file makersweb 2021.03.01 921
50 QML 바인딩 끊김 진단 makersweb 2020.11.08 910
49 QProcess 예제 (프로그램 재시작) file makersweb 2023.01.25 892
48 QML 에서 QR코드 생성 file makersweb 2021.08.20 892
47 Qt로 작성된 안드로이드 APP에 Splash Screen을 추가 file makersweb 2020.03.10 883
46 Qt 응용프로그램에서 Lottie Animation사용 file makersweb 2021.05.30 881
45 Qt 하이브리드 애플리케이션(Hybrid App) 개발 file makersweb 2023.02.08 879
44 Qt 6의 C++ 프로퍼티 바인딩 예제 makersweb 2021.11.01 856
43 Qt로 작성된 iOS 앱에서 시리얼 통신 file makersweb 2022.04.30 850
42 QML에서 Websocket 서버와 통신 file makersweb 2021.09.18 830
41 QPA 플러그인과 HTML5 Backend file makersweb 2017.12.27 808
40 Qt 6 에서 프로퍼티 바인딩 makersweb 2021.04.03 770