2009-06-18 14 views
54

मैं हाल ही में किए गए एक साधारण क्यूटी एप्लिकेशन को तैनात करने (सार्वजनिक रूप से रिलीज़) करने की कोशिश कर रहा हूं, लेकिन स्थिर लिंकिंग क्यूटी libs पर अटक गया।क्यूटी स्थैतिक लिंकिंग और तैनाती

मैंने qt दस्तावेज़ों पर क्यूटी और मेरे ऐप को फिर से बनाने के लिए मार्गदर्शिका का पालन किया। लेकिन रिलीज बिल्ड को अभी भी कोई स्पष्ट कारणों से qtgui/qtcore dll की आवश्यकता नहीं है, मुझे आश्चर्य है कि किसी ने इस तरह की समस्याओं को पहले देखा है? या इससे भी बेहतर, इसे सफलतापूर्वक हल कर लिया है?

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

+1

क्या आपके पास QtCore4.a, QtGui4.a की स्थिर प्रतियां हैं? फिर ''CONFIG + = static''' जोड़ना इसे हल करेगा। यदि आपके पास क्यूटी की स्थिर प्रति नहीं है, तो स्रोत को पकड़ें और बनाएं। स्थैतिक libs प्राप्त करने में कई घंटे लगते हैं। –

उत्तर

0

आप अपने .pro फाइल करने के लिए कॉन्फ़िग + = स्थिर जोड़ने के लिए। यदि यह ठीक काम नहीं करता है, तो आपको कुछ और जानकारी प्रदान करनी होगी।

+6

यह गलत है। ऐसा कॉन्फ़िगर ध्वज कुछ भी नहीं करता है। –

40

मैंने लिखा a guide to static linking

और How to build Qt static with multiple compilers and keep it small

(यह बहुत बड़ा है, खासकर सरल कार्यक्रमों के लिए प्राप्त कर सकते हैं क्योंकि)। आप बिट्रॉक इंस्टॉलर को भी देखना चाहते हैं, जो ओपन सोर्स प्रोजेक्ट्स के लिए नि: शुल्क है।

संक्षेप में, यदि आप कुछ भी उपयोग कर रहे हैं तो यह थोड़ा अधिक जटिल हो जाता है क्यूटी एक प्लगइन के रूप में सोचता है, जैसे अधिकांश छवि प्रकारों (जेपीईजी, जीआईएफ) या डेटाबेस के लिए समर्थन। उदाहरण के लिए, यदि आप और आपके माउस के लिए Oracle DBMS के लिए समर्थन GIF चित्र शामिल करना चाहते हैं, तो आप अपने .pro फाइल करने के लिए निम्नलिखित जोड़ें:

#include <QtPlugin> 

:

QTPLUGIN += qsqloci qgif 
CONFIG += static 

फिर आप की आवश्यकता होगी अपनी परियोजना में, और इस्तेमाल किए गए किसी भी प्लगइन आयात करें। गतिशील लिंकिंग के साथ संकलन करने के लिए आपको इन सेटिंग्स को वापस क्रम में बदलने की आवश्यकता है (जैसे डिबगिंग या सुविधाओं को जोड़ना), हालांकि इसे आसानी से स्वचालित किया जा सकता है। स्थिर लिंकिंग के साथ उपयोग के लिए क्यूटी पुस्तकालयों का निर्माण करते समय भी विचार-विमर्श होते हैं, हालांकि क्यूटी निर्देश कम से कम आपको शुरू कर देंगे।

+12

यदि आप स्थिर रूप से लिंक करते हैं तो लाइसेंसिंग समस्याओं से अवगत रहें। – Lisa

+5

लिंक टूटा हुआ .. – Jared

+4

ठीक है लिंक को ठीक करें, अब आपका जवाब बेकार है ... – Veger

6

साथ ही, ध्यान रखें कि आपका स्थिर निर्माण अभी भी दृश्य स्टूडियो रनटाइम्स को गतिशील रूप से लिंक करेगा!

देखें this faq (internet archive link, in case the link goes away):

क्यों एक स्थिर बनाया क्यूटी गतिशील दृश्य स्टूडियो क्रम पुस्तकालयों का उपयोग करता है? क्या मुझे अपने आवेदन के साथ उन लोगों को तैनात करने की ज़रूरत है?

क्यूटी -एमडी (डी) स्विच का उपयोग करके बनाया गया है, जो गतिशील सी/सी ++ रनटाइम पुस्तकालयों के खिलाफ लिंक करता है। यह जरूरी है क्योंकि हमने एमएम (डी) ध्वज के अलावा कुछ भी उपयोग करते समय स्मृति समस्याओं का अनुभव किया है, और सामान्य रूप से, इसका उपयोग करने की अनुशंसा की जाती है। आपको अपने आवेदन के लिए स्वयं को इस ध्वज को नहीं बदलना चाहिए, क्योंकि अगर आप ध्वज को -एमटी में बदलते हैं तो यह क्यूटी लाइब्रेरी का निर्माण कैसे किया जाता है। आपको इसे क्यूटी के लिए भी नहीं बदला जाना चाहिए, क्योंकि इससे समस्याएं पैदा हो सकती हैं।

कस्ट अभी भी स्थैतिक विकल्प का उपयोग करते समय स्थिर रूप से बनाया गया है, जिसका अर्थ है कि आपको अपने आवेदन को तैनात करते समय क्यूटी डीएल वितरित करने की आवश्यकता नहीं है। आपको सी रनटाइम वितरित करना होगा हालांकि (यदि वे लक्ष्य मशीन पर पहले से मौजूद नहीं हैं), तो हमारे परिनियोजन दस्तावेज़ http://doc.qt.io/qt-5/windows-deployment.html#application-dependencies देखें।

12

क्यूटी 5.5 के साथ, चीजें काफी आसान हैं।

  1. आप एक स्थिर क्यूटी पुस्तकालय चाहते हैं: वहाँ निम्नलिखित ओर्थोगोनल सेटिंग्स है कि आप जब क्यूटी निर्माण configure को पारित कर रहे हैं?

    -static विकल्प configure

  2. के लिए पारित किया जाना चाहिए आप क्यूटी का निर्माण करना चाहते हैं, और अपने आवेदन की एक स्थिर सी ++ क्रम उपयोग कैसे करें?

    -static-runtime विकल्प configure

  3. आप XP को लक्षित करना चाहते हैं के लिए पारित किया जाना चाहिए?

    -target xp विकल्प configure

    इसके अतिरिक्त करने के लिए पारित किया जाना चाहिए, this blog post से निर्देशों का पालन करें।

    क्यूटी निर्माता ने कम से कम v.3.5.0 तक स्वचालित रूप से एक्सपी लक्ष्यीकरण का समर्थन नहीं किया क्योंकि यह बिल्ड टूल्स के लिए पर्यावरण को सही तरीके से स्थापित नहीं करता है। आपको बिल्ड वातावरण को मैन्युअल रूप से per the blog post संशोधित करना होगा।

+0

'कॉन्फ़िगर करें '== CONFIG? – user2962533

+2

@ user2962533 नहीं, यह आपके द्वारा क्यूटी बनाने से पहले चलाने वाली 'कॉन्फ़िगरेशन' स्क्रिप्ट के बारे में है। –

1

मैं सिर्फ एक आवेदन संकलित स्थिर (डीबग करें) क्यूटी प्लगइन्स (5.9), वी.एस. (2015) के साथ (जीत) के साथ ।

ए) अपने कोड में जोड़ें।

#include <QtPlugin> 
Q_IMPORT_PLUGIN (QWindowsIntegrationPlugin); 

ख) लिंक रास्तों

\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 

ग) अपने लिंक सूची में क्यूटी स्थिर पुस्तकालयों और आंतरिक वी.एस. पुस्तकालयों की सूची में जोड़ें करने के लिए निम्न जोड़ें।

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 

केविन हिगिंस

2

msys2 पहले से बने static Qt5 package

... जो, CMake का उपयोग कर, जब CMAKE_AUTOSTATICPLUGINS लक्ष्य संपत्ति सेट कर दिया जाता है, यह भी सभी उपलब्ध प्लगइन्स लिंक होता है। (वर्तमान में, यह केवल डाउनस्ट्रीम पैच के माध्यम से सक्षम है, अनौपचारिक है, लेकिन यह लक्ष्य तक पहुंचता है)

यदि आप qmake का उपयोग करते हैं तो कम से कम इसे स्वयं बनाने का प्रयास आपको बचाता है।

+0

मैं इसका उपयोग करना चाहता हूं, लेकिन मुझे यकीन नहीं है कि CMAKE_AUTOSTATICPLUGINS कैसे सेट करें। मैं qmake का उपयोग कर रहा हूँ तो बनाओ। क्या आप सलाह दे सकते हैं? – tofutim

+0

क्या आपने वहां 'qmake' को गलत टाइप किया था क्योंकि यह यहां सीएमके के बारे में है। आप इसे वैश्विक रूप से सेट कर सकते हैं: 'सेट करें (CMAKE_AUTOSTATICPLUGINS चालू) 'या एक लक्षित विशिष्ट संपत्ति के रूप में:' set_target_properties ($ {PROJECT_NAME} संपत्ति ऑटोस्टैटिकप्लगिन ऑन)'। – Darklighter

संबंधित मुद्दे