[Qt] Static Build (exe 파일 단독 실행)
Qt Creator를 통해 빌드한 결과물인 exe 파일을 단독으로 실행하면 아래처럼 오류 메시지가 나오게 됩니다.
실행파일을 실행하기 위해선 Qtcore에 명시한 dll들이 필요한데 그 dll들이 없어서 위와 같이 오류가 뜨게 됩니다. 이러한 dll들을 자동으로 추가해주는 windeployqt라는 툴도 있습니다.
이번에는 dll 없이 단독으로 실행할 수 있게 Static build 환경을 만들어보겠습니다.
먼저 Qt Maintenance를 실행해 빌드 환경과 Source를 설치합니다.
설치가 완료되었으면 Qt가 설치된 폴더로 이동 후 Static 이라는 이름의 폴더를 하나 만들어줍니다.
그리고 그 Static 폴더 내부에 5.15.2(버전) 폴더를 하나 더 생성 후 Qt\5.15.2\Src 폴더를 Qt\Static에 복사합니다.
복사가 다 됐다면 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를 실행 후 환경 변수를 추가합니다. mingw은 설치된 버전에 맞춥니다.
다음으로 Qt Console을 실행하고 Qt\Static\Src로 이동 후 아래 코드를 실행합니다.
주의할 점은 -prefix 뒤 폴더는 생성한 폴더에 맞춰야 합니다.
configure -static -release -platform win32-g++ -prefix C:\Qt\Static\5.15.2 -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
configure이 끝났으면 마지막으로 아래 두 명령을 실행합니다. 아래 두 작업에는 대략 30분 ~ 1시간이 소요됩니다.
mingw32-make -k -j4
mingw32-make -k install
만약 Make 시에 아래처럼 Qml 쪽 에러가 나오고 JSC::Yarr::newlineCreate라는 에러 메시지가 나온다면 https://www.python.org/downloads/ 링크에서 Python을 다운로드 해줍니다.
설치 시에 Add Python.exe to PATH를 체크합니다.
make가 모두 끝났으면 Qt\Static\5.15.2\mkspecs\win32-g++에 있는 qmake.conf를 열어 아래 코드를 추가합니다.
CONFIG += static
이제 Qt Creator를 실행해 [Edit] > [Preference]를 실행합니다. [Qt Versions]에서 Add를 누른 후 Qt\Static\5.15.2\bin에 qmake.exe를 선택한 후 Apply 해줍니다.
다음으로 [Kits]로 이동해 Add 후 아래처럼 Qt Version에 위에서 만든 버전을 선택 후 적용합니다.
마지막으로 Projects에서 위에서 만든 Kit를 적용 후 Build합니다.