문제

나는 최근 QT4 이익 메일 링리스트에 대한 논의가 합법적인지 상업/독점 응용 프로그램을 구축하고 QT4를 정적으로 연결하는지 여부에 대한 토론을 따랐다. 고객에게 객체 파일과 makefile 등을 제공함으로써 수행 할 수없는 방법이 있지만, 그 후에는 그런 좋은 아이디어처럼 들리지 않습니다.

내 프로젝트 중 하나는 LGPL 라이센스 QT4 라이브러리를 사용하는 것이며 모든 플랫폼에서 간단한 설치 프로그램을 사용하여 별도의 DLLS/DYLIBS/SO 's COIMSTER로 배송합니다. 이것은 지금까지 꽤 잘 작동하지만 a) 필요한 것을 포함하여 QT 라이브러리 크기를 줄임으로써 설치 프로그램의 크기를 최적화하고 싶습니다. b) 응용 프로그램의 시작/로딩 속도를 높입니다.

QT를 직접 컴파일하는 데 익숙하지만 QT에는 많은 깃발과 스위치가 있습니다.

지금은 다음 깃발로 건축하고 있습니다.

./configure \
  -fast \
  -opensource \
  -qt-sql-sqlite \
  -nomake demos examples \
  -silent \
  -no-qt3support \
  -no-gif \
  -plugin-sql-mysql \
  -release \
  -no-xmlpatterns \
  -no-multimedia

다음 깃발이 어떤 효과/영향을 미치는지 확실하지 않습니다.

  • -no-stl
  • -no-javascript-jit
  • -no-nis
  • -separate-debug-info
  • -no-openvg
  • -no-mitshm

예를 들어 컴파일러에 대한 최적화 스위치를 제공하거나 구축 된 QT 라이브러리에서 사용되지 않은 기능을 "스트리핑"하여 더 작게 만들 수있는 다른 일이 있습니까 (정적 빌드로는 쉽게). 나는 그것에 대한 경험이 많지 않습니다.

오, 사이드 코트와 마찬가지로 QT와 동적으로 연결할 때 컴파일 된 애플리케이션 크기는 약 600KB (스트립되지 않은)입니다. 나는 그것을 실험하고 정적으로 연결할 때 크기가 약 4MB 인 것을 발견했습니다. 그러나 그렇게하면 더 이상 40MB의 QT 라이브러리를 포함 할 필요가 없습니다.

따라서 위의 모든 것을 질문/요청에 넣습니다.

이 주제에 대해 나보다 더 진보 된 경우, 자신의 애플리케이션을 최적화/배포하고 빠르게 시작하고 필요한 것만 포함하도록하는 방법은 무엇입니까?

도움이 되었습니까?

해결책

내가 생각할 수있는 것은 몇 가지가 있습니다.

  • 크기 최적화가 우수한 컴파일러/링커 조합을 사용하십시오. MSVC는 예를 들어 Mingw보다 훨씬 낫습니다. 모든 QT 릴리스 DLL은 MSVC가 ~ 21MB로 구축되었습니다. Mingw와 함께 건축 된 총은 ~ 41MB입니다. 그건 그렇고, 당신은 진짜 모든 DLL을 배송해야합니까?
  • -LTCG (링크 -타임 코드 생성) 플래그를 사용하여 객체 파일을 최적화하십시오.
  • QT 기능의 일부를 제외하려면 전처리 기 플래그를 사용하십시오. 예 : QT_NO_STL = -NO -STL.
  • MMX/3D NOW/SSE2 플래그를 사용해보십시오
  • 스타일을 제거하십시오 (-no 스타일-)

다른 팁

모든 모듈을 건너 뛰고 필요하지 않다고 생각되면 QCONFIG 도구 ($ QTDIR/ Tools/ Tree에 숨겨진)를 계속 사용하고 개별 클래스를 제거 할 수 있습니다. 의존성을 조심하십시오 - QT를 구축하기 위해 몇 번 반복해야 할 수도 있습니다 (예 : Qspinbox는 QValidator가 존재하는 것에 따라 다름).

QT, 특히 여러 번 구축 할 때 -nomake 플래그는 훌륭한 타임즈 베이비입니다. -nomake 예제 -Nomake 데모를 시도하십시오.

일반적인 속도에 대한 또 다른 최적화는 QT를 컴파일 할 때 컴파일러 최적화를 사용하는 데 있습니다. 그러나 일부 파일을 편집해야합니다. GIT에서 QT를 받으면 QTBase/ Dir로 끝납니다. 먼저 qmake를 빌드하는 구성 스크립트를 실행합니다.

메모: makefile.win32 또는 makefile.unix를 수정하고 다음과 같은 선을 추가 할 수 있습니다.

QMAKE_CXXFLAGS_RELEASE = -CompilerDependentOptimizerSwitches 

QMake를 최적화하려면 QMake의 실행 시간이 중간 크기의 앱의 전체 컴파일 시간의 0.0000001% 일 수 있다는 점을 고려할 때 실제로 필요하지 않다고 생각합니다.

하지만 진짜 QT를 구축하는 데 사용되는 MKSPEC를 편집 할 때 최적화가 나옵니다.

예를 들어, VS2012가있는 Windows에서는 수정할 수 있습니다. qtbase/mkspecs/win32-msvc2012/qmake.conf.

전. : 기본 QT5.1에서 MSVC2012 MKSPEC는 다음과 같습니다.

QMAKE_CFLAGS_RELEASE    = -O2 -MD
QMAKE_CXXFLAGS_RELEASE  = $$QMAKE_CFLAGS_RELEASE

크기를 최적화하려면 다음과 같이 대체 할 수 있습니다.

QMAKE_CFLAGS_RELEASE    = -O1 -MD

(에 따르면 http://msdn.microsoft.com/en-us/library/8f8h5cxt.aspx )

때로는 더 높은 수준의 MKSPEC가 포함되어 있습니다 qtbase/mkspecs/common/ 멍청이

Debian/G ++ 4.8.1에서 QT5.1을 성공적으로 컴파일했습니다. -O3 -march=native (기본값은입니다 -O2) 누구나 서비스를 제공하는 경우.

이 작업을 수행 한 후에는 QT Git Root에서 Make를 실행하고 팀과 맥주를 마시고 좋은 컴퓨터에서도 나이가 들지 않아 (I7에서 약 2 시간, 데모 / 예제 없이는 WebKit)가 필요하기 때문입니다.

sed -i 's@QMAKE_CXXFLAGS_THREAD  += $$QMAKE_CFLAGS_THREAD@QMAKE_CXXFLAGS_THREAD  += $$QMAKE_CFLAGS_THREAD -march=native@g'  qtbase/mkspecs/common/linux.conf

Linux에서 QT5.8을 최적화합니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top