سؤال

لقد تابعت مؤخرًا مناقشة حول القائمة البريدية الخاصة باهتمامات Qt4 حول ما إذا كان من القانوني أم لا إنشاء تطبيق تجاري/ملكي وربط Qt4 به بشكل ثابت.على الرغم من وجود بعض الطرق غير المثبتة للقيام بذلك (من خلال توفير ملفات الكائنات وملف Makefile، وما إلى ذلك).للعميل)، لا تبدو هذه فكرة جيدة على الإطلاق.

أحد مشاريعي هو استخدام مكتبات Qt4 المرخصة من LGPL وأقوم بشحنها كمكتبات DLL/Dylibs/so منفصلة إلى عميلي، باستخدام أداة تثبيت بسيطة على جميع الأنظمة الأساسية.على الرغم من أن هذا يعمل بشكل جيد حتى الآن، إلا أنني أرغب في تحسين أ) حجم المثبت عن طريق تقليل حجم مكتبة Qt عن طريق تضمين ما أحتاج إليه فقط، ب) زيادة سرعة بدء التشغيل/التحميل لتطبيقي.

أنا على دراية بتجميع 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 المدمجة لجعلها أصغر (وهو أمر سيكون سهلاً مع البنيات الثابتة).ليس لدي خبرة كبيرة في ذلك.

أوه، كملاحظة جانبية، يبلغ حجم تطبيقي المترجم حوالي 600 كيلو بايت (غير مُجرد) عند الارتباط بـ Qt ديناميكيًا.لقد جربته ووجدت أن حجمه يبلغ حوالي 4 ميغابايت عندما أقوم بالربط بشكل ثابت؛ولكن بهذه الطريقة لن أضطر إلى تضمين 40 ميغابايت من مكتبات Qt بعد الآن.

لذا، لوضع كل ما سبق في سؤال/طلب:

إذا كنت أكثر تقدمًا مني في هذا الموضوع، فكيف يمكنك تحسين/نشر تطبيقاتك الخاصة والتأكد من أنها تبدأ بسرعة وتحتوي فقط على ما هو مطلوب؟

هل كانت مفيدة؟

المحلول

هناك القليل من الأشياء التي يمكنني التفكير فيها:

  • استخدم مجموعة مترجم/رابط تعمل على تحسين الحجم بشكل جيد.MSVC أفضل بكثير في هذا من MinGW على سبيل المثال.جميع ملفات DLL الخاصة بإصدار Qt والتي تم إنشاؤها باستخدام MSVC يبلغ إجماليها حوالي 21 ميجابايت.تم إنشاؤها باستخدام MinGW ويبلغ إجماليها حوالي 41 ميجابايت.بالمناسبة، هل حقًا تحتاج إلى شحن كافة ملفات DLL؟
  • استخدم العلامة -ltcg (إنشاء كود وقت الارتباط) للتحسين عبر ملفات الكائنات.
  • استخدم إشارات المعالج المسبق لاستبعاد أجزاء من وظيفة Qt.على سبيل المثال:QT_NO_STL = -no-stl.
  • جرب أعلام mmx/3d now/sse2
  • إزالة بعض الأنماط (-no-style-)

نصائح أخرى

عندما تتخطى جميع الوحدات وتشعر أنك لا تحتاج إليها، يمكنك الاستمرار في استخدام أداة qconfig (نوعًا ما تكون مخفية في شجرة $QTDIR/tools/) وإزالة الفئات الفردية.فقط احذر من التبعيات - قد تضطر إلى التكرار عدة مرات حتى يتم إنشاء Qt (على سبيل المثال، يعتمد QSpinBox على وجود QValidator).

عند إنشاء Qt، خصوصًا عدة مرات، فإن العلم -nomake يوفر وقتًا رائعًا.حاول -nomake أمثلة -nomake العروض التوضيحية.

تحسين آخر للسرعة العامة يكمن في استخدام تحسينات المترجم عند تجميع Qt، ولكن عليك تحرير بعض الملفات.عندما تحصل على Qt من Git، سينتهي بك الأمر مع qtbase/dir.أولاً، عليك تنفيذ البرنامج النصي للتكوين، الذي يبني qmake

ملحوظة: يمكنك تعديل Makefile.win32 أو Makefile.unix وإضافة أسطر مثل:

QMAKE_CXXFLAGS_RELEASE = -CompilerDependentOptimizerSwitches 

إذا كنت تريد تحسين qmake، لكنني لا أعتقد أن ذلك ضروري حقًا، مع الأخذ في الاعتبار أن وقت تشغيل qmake قد يكون 0.0000001% من إجمالي وقت الترجمة لتطبيق متوسط ​​الحجم.

لكن ال حقيقي يأتي التحسين عند تحرير مواصفات mkspec المستخدمة لبناء Qt.

على سبيل المثال، ضمن النوافذ التي تحتوي على VS2012، من المحتمل أن تقوم بالتعديل qtbase/mkspecs/win32-msvc2012/qmake.conf.

السابق.:في الوضع الافتراضي Qt5.1، يقرأ mkspec msvc2012:

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/ دير.

لقد نجحت في تجميع Qt5.1 على Debian/g++4.8.1 باستخدام -O3 -march=native (الافتراضي هو -O2) إذا كان يخدم أي شخص.

بعد القيام بذلك، ما عليك سوى تشغيل make على Qt git root، والذهاب لتناول الجعة مع فريقك لأنه حتى على جهاز كمبيوتر جيد، سيستغرق الأمر وقتًا طويلاً (حوالي 20 دقيقة).2 ساعة على i7، بدون إنشاء عروض توضيحية/أمثلة، ولكن باستخدام webkit).

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

سيتم تحسين Qt5.8 على Linux

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top