Development Tip

Qt 정적 연결 및 배포

yourdevel 2020. 11. 18. 21:35
반응형

Qt 정적 연결 및 배포


최근에 만든 간단한 qt 응용 프로그램을 배포 (공개)하려고했지만 qt libs를 정적 연결하는 데 문제가 있습니다.

qt 문서의 가이드를 따라 qt와 내 앱을 정적으로 다시 빌드했습니다. 그러나 릴리스 빌드에는 명백한 이유없이 여전히 qtgui / qtcore dll이 필요합니다. 이전에 이런 종류의 문제를 본 사람이 있는지 궁금합니다. 아니면 더 나은 방법으로 문제를 성공적으로 해결 했습니까?

http://doc.qtsoftware.com/4.5/deployment-windows.html


정적 링크에 대한 가이드를 작성 했습니다.

여러 컴파일러로 Qt 정적을 빌드하고 작게 유지하는 방법

(특히 간단한 프로그램의 경우 꽤 커질 수 있기 때문입니다). 오픈 소스 프로젝트에 무료로 제공되는 BitRock 설치 프로그램을 확인하는 것도 좋습니다.

요컨대, 대부분의 이미지 유형 (JPEG, GIF) 또는 데이터베이스에 대한 지원과 같이 Qt가 플러그인으로 생각하는 것을 사용하는 경우 약간 더 복잡해집니다. 예를 들어 Oracle DBMS 및 GIF 이미지에 대한 지원을 아이콘에 포함하려면 .PRO 파일에 다음을 추가합니다.

QTPLUGIN += qsqloci qgif
CONFIG += static

그런 다음 다음을 수행해야합니다.

#include <QtPlugin>

프로젝트에서 사용 된 플러그인을 가져옵니다. 쉽게 자동화 할 수 있지만 동적 링크로 다시 컴파일하려면 이러한 설정을 역순으로 변경해야합니다 (예 : 기능을 디버깅하거나 추가 할 때). 정적 링크와 함께 사용할 Qt 라이브러리를 빌드 할 때도 고려해야 할 사항이 있지만 Qt 지침이 최소한 시작하는 데 도움이 될 것입니다.


Qt 5.5를 사용하면 작업이 매우 쉽습니다. configureQt를 빌드 전달하는 다음과 같은 직교 설정이 있습니다 .

  1. 정적 Qt 라이브러리를 원하십니까?

    -static 옵션을 전달해야합니다. configure

  2. 정적 C ++ 런타임을 사용하기 위해 Qt 및 애플리케이션 빌드를 원하십니까?

    -static-runtime 옵션을 전달해야합니다. configure

  3. XP 타겟팅을 원하십니까?

    -target xp 옵션을 전달해야합니다. configure

    또한 이 블로그 게시물 의 지침을 따르십시오 .

    Qt Creator는 빌드 도구에 대한 환경을 제대로 설정하지 않았기 때문에 적어도 v.3.5.0까지는 XP 타겟팅을 자동으로 지원하지 않았습니다. 블로그 게시물에 따라 빌드 환경을 수동으로 수정해야합니다 .


또한 정적 빌드는 여전히 Visual Studio 런타임에 동적으로 연결됩니다.

이 FAQ를 참조하십시오 ( 링크가 사라지는 경우 인터넷 아카이브 링크 ).

정적으로 빌드 된 Qt가 동적 Visual Studio 런타임 라이브러리를 사용하는 이유는 무엇입니까? 내 응용 프로그램과 함께 배포해야합니까?

Qt는 동적 C / C ++ 런타임 라이브러리에 연결되는 -MD (d) 스위치를 사용하여 빌드됩니다. 이것은 -MD (d) 플래그 이외의 것을 사용할 때 메모리 문제를 경험했기 때문에 필요하며 일반적으로 사용하는 것이 좋습니다. 플래그를 -MT로 변경하면 Qt 라이브러리가 빌드되는 방식과 충돌하므로 애플리케이션에 대해이 플래그를 직접 변경하지 마십시오. 문제를 일으킬 수 있으므로 Qt에 대해서도 변경해서는 안됩니다.

Qt는 -static 옵션을 사용할 때 여전히 정적으로 빌드됩니다. 즉, 애플리케이션을 배포 할 때 Qt dll을 배포 할 필요가 없습니다. C 런타임을 배포해야합니다 (대상 머신에 아직없는 경우), 배포 설명서 http://doc.qt.io/qt-5/windows-deployment.html#application-dependencies를 참조하십시오. .


msys2 에는 미리 빌드 된 정적 Qt5 패키지가 있습니다.

… CMake를 사용하여 CMAKE_AUTOSTATICPLUGINStarget 속성이 설정되면 사용 가능한 모든 플러그인도 연결됩니다. (현재는 비공식적 인 다운 스트림 패치를 통해서만 활성화되지만 목표에 도달 함)

만약 당신이 qmake를 사용한다면 이것은 적어도 당신이 직접 만들려는 노력을 아끼지 않을 것입니다.


방금 QT Plugins (5.9)와 VS (2015) (Win)를 사용하여 응용 프로그램을 정적으로 (디버그) 컴파일했습니다.

a) 코드에 추가하십시오.

#include <QtPlugin>
Q_IMPORT_PLUGIN (QWindowsIntegrationPlugin);

b) 링크 경로에 다음을 추가하십시오.

\5.9.0_x86_static_install\lib
\5.9.0_x86_static_install\bin
\5.9.0_x86_static_install\plugins
\5.9.0_x86_static_install\plugins\platforms
\5.9.0_x86_static_install\plugins\imageformats

c) QT 정적 라이브러리 및 내부 VS 라이브러리 목록을 링크 목록에 추가합니다.

version.lib
imm32.lib
shlwapi.lib
rpcrt4.lib
Ws2_32.lib
Mpr.lib
Netapi32.lib
Rpcrt4.lib
Iphlpapi.lib
winmm.lib
gdi32.lib
advapi32.lib
msimg32.lib
UxTheme.lib
translatord.lib
preprocessord.lib
d3d9.lib
dxguid.lib
libEGLd.lib
libGLESv2d.lib
iphlpapi.lib
psapi.lib
ws2_32.lib
Dwmapi.lib
Qt5CoreD.lib
Qt5Guid.lib
Qt5Xmld.lib
Qt5Widgetsd.lib
Qt5Networkd.lib
Qt5Winextrasd.lib
Qt5PlatformCompositorSupportd.lib
qicod.lib
qtmaind.lib
qtlibpngd.lib
qtharfbuzzd.lib
qtpcre2d.lib
qwindowsd.lib
Qt5FontDatabaseSupportd.lib
Qt5ThemeSupportd.lib
Qt5EventDispatcherSupportd.lib
Qt5AccessibilitySupportd.lib
qtfreetyped.lib

케빈 히긴스


linuxdeployqt 이 도구 를 사용하는 것이 좋습니다 . 대부분의 종속성 문제를 해결하는 데 도움이 될 수 있습니다. 그리고 그것을 사용하여 내 qt 응용 프로그램을 성공적으로 패키징합니다.

참고URL : https://stackoverflow.com/questions/1011197/qt-static-linking-and-deployment

반응형