c++ - क्यूटी 5.1.1: एप्लिकेशन शुरू करने में विफल रहा क्योंकि प्लेटफार्म प्लगइन "विंडोज़" गायब है




windows qt (9)

अगर आपके पास एनाकोंडा इंस्टॉल है, तो मैं इसे अनइंस्टॉल करने के लिए आपको सलाह देता हूं और स्रोत से पायथन पैकेज स्थापित करने का प्रयास करता हूं, मैंने इस समस्या को इस तरह से ठीक किया है

संपादित करें: कुछ लोगों ने मेरे प्रश्न को डुप्लिकेट के रूप में चिह्नित करना शुरू कर दिया। यह मत भूलना कि जब मैंने यह पूछा तो कई समान प्रश्न मौजूद थे (उदाहरण के लिए नीचे दी गई सूची देखें)। हालांकि, इनमें से किसी भी उत्तर ने मेरी समस्या हल नहीं की । एक लंबी खोज के बाद मुझे एक टिप्पणी मिली जो लापता lib को इंगित करने वाले सभी उपयोगकर्ताओं द्वारा अनदेखा कर दिया गया था। अब, कई महीने बाद, टिप्पणी को एक जवाब में बदल दिया गया है। हालांकि, जब मैंने इस सवाल का जवाब दिया, तो मैं सीधे समाधान प्रदान करके अन्य लोगों की मदद करना चाहता था। इसे भुलाया नहीं जाना चाहिए और अब तक मेरे उत्तर ने बहुत से लोगों की मदद की है। इसलिए मेरा सवाल निश्चित रूप से एक डुप्लिकेट नहीं है। वैसे: शीर्ष पर दिए गए लिंक के भीतर स्वीकृत उत्तर समस्या का समाधान नहीं करता है !

हाँ, मैंने खोज का उपयोग किया:

मंच प्लगइन "विंडोज़" लोड करने में विफल। उपलब्ध प्लेटफॉर्म हैं: त्रुटि

विजुअल स्टूडियो qwindows.dll त्रुटि से क्यूटी सी ++ एप्लिकेशन को तैनात करना

मंच प्लगइन "विंडोज़" लोड करने में विफल रहा उपलब्ध प्लेटफ़ॉर्म हैं: विंडोज़, न्यूनतम

हालांकि, मेरे मामले में समस्या अभी भी बनी हुई है। मैं विजुअल स्टूडियो 2012 के साथ क्यूटी 5.1.1 का उपयोग कर रहा हूं और क्यूटी निर्माता 2.8.1 के साथ विंडोज 7 पर अपना एप्लीकेशन विकसित किया है। एप्लिकेशन को "रिलीज" -मोड में संकलित किया गया है और सीधे क्यूटी निर्माता के साथ शुरू होने पर निष्पादित किया जा सकता है।

हालांकि, जब "रिलीज" से शुरू होता है- फ़ोल्डर, मुझे निम्न संदेश मिलता है:

यह एप्लिकेशन शुरू करने में विफल रहा क्योंकि यह Qt प्लेटफ़ॉर्म प्लगइन "विंडोज़" को नहीं ढूंढ सका या लोड नहीं कर सका। उपलब्ध प्लेटफॉर्म प्लगइन्स हैं: न्यूनतम, ऑफस्क्रीन, विंडोज़।

फ़ोल्डर संरचना इस तरह दिखती है:

release
+ gui.exe
+ icudt51.dll
+ icuin51.dll
+ icuuc51.dll
+ libGLESv2.dll
+ Qt5Core.dll
+ Qt5Gui.dll
+ Qt5Widgets.dll
+ platforms

प्लेटफॉर्म क्यूटी \ Qt5.1.1 \ 5.1.1 \ msvc2012 \ plugins \ प्लेटफॉर्म जैसे सीधे qwindows.dll से कॉपी किया गया फ़ोल्डर है। इससे कोई फर्क नहीं पड़ता कि मैं इसे "मंच" में बदलता हूं क्योंकि कुछ अन्य उपयोगकर्ताओं ने किया था। क्यूटी अभी भी "मंच प्लगइन विंडोज़" नहीं ढूंढ रहा है, मेरी गलती कहां है?


इनमें से अधिकतर उत्तरों में अच्छी (सही) जानकारी होती है, लेकिन मेरे मामले में, अभी भी कुछ याद आ रही थी।

मेरा ऐप लाइब्रेरी (डीएलएल) के रूप में बनाया गया है और इसे गैर-क्यूटी एप्लिकेशन द्वारा बुलाया जाता है। मैंने स्थापित निर्देशिका में Qt dlls, प्लेटफ़ॉर्म, प्लगइन्स इत्यादि को स्थापित करने के लिए windeployqt.exe का उपयोग किया, लेकिन यह अभी भी प्लेटफ़ॉर्म नहीं ढूंढ सका। कुछ प्रयोगों के बाद, मुझे एहसास हुआ कि एप्लिकेशन की कार्यशील निर्देशिका को एक अलग फ़ोल्डर में सेट किया गया था। इसलिए, मैंने निर्देशिका को पकड़ लिया जिसमें डीएलएल GetModuleHandleExA का उपयोग करके "रहता था" और उस निर्देशिका को रनटाइम पर क्यूटी लाइब्रेरी पथ में जोड़ा गया

QCoreApplication::addLibraryPath(<result of GetModuleHandleExA>);

यह मेरे लिए काम किया।


एक मिनीजीडब्लू प्लेटफ़ॉर्म के लिए और यदि आप एक हाथ से बने डीबग लक्ष्य को संकलित कर रहे हैं तो CMakeLists.txt लिखित विज्ञापन है, तो आपको qwindows.dll को प्लेटफ़ॉर्म डीआईआर में भी जोड़ना होगा। Windeployqt निष्पादन योग्य अपने काम को अच्छी तरह से करता है लेकिन ऐसा लगता है कि कुछ अजीब कारणों से सीएमके निर्माण को रिलीज संस्करण की भी आवश्यकता है। संक्षेप में आपकी प्लेटफ़ॉर्म निर्देशिका में qwindows.dll और qwindowsd.dll दोनों होना बेहतर होगा। QtCreator में सीएमके परियोजना आयात करते समय और फिर निर्माण प्रक्रिया को चलाने के दौरान मैंने एक ही अजीब परिणाम नहीं देखा। कमांड लाइन पर संकलन सीएमके प्रोजेक्ट qwindows.dll निर्भरता को ट्रिगर करने लगता है या तो यदि डीबग लक्ष्य के लिए सही एक स्थान पर सेट किया गया है (qwindowsd.dll)


क्यूटी 5.6, एनाकोंडा 4.3.23, पायथन 3.5.2 और पायइंस्टॉलर 3.3 का उपयोग करते समय मुझे यह समस्या थी। मैंने QTCreator का उपयोग करके विकसित एक इंटरफ़ेस के साथ एक पायथन प्रोग्राम बनाया था, लेकिन उसे अन्य कंप्यूटरों पर तैनात करना पड़ा, इसलिए मुझे पायइंस्टॉलर का उपयोग करके निष्पादन योग्य बनाने की आवश्यकता थी।

मैंने पाया है कि अगर मैं निम्नलिखित पर्यावरण चर सेट करता हूं तो समस्या मेरे कंप्यूटर पर हल हो गई थी:

QT_QPA_PLATFORM_PLUGIN_PATH:% QTDIR% \ plugins \ platforms \

QTDIR: सी: \ Miniconda3 \ pkgs \ qt-5.6.2-vc14_3 \ पुस्तकालय

लेकिन यह समाधान केवल मेरे पीसी पर काम करता था जिसमें उन फ़ोल्डर्स में कोंडा और क्यूटी स्थापित था।

इसे हल करने और किसी भी कंप्यूटर पर निष्पादन योग्य काम करने के लिए, मुझे निम्न पंक्ति को शामिल करने के लिए ".spec" (पहले pyinstaller द्वारा जेनरेट की गई फ़ाइल) को संपादित करना होगा:

डेटा = [('सी: \ मिनीकॉन्डा 3 \ pkgs \ qt-5.6.2-vc14_3 \ लाइब्रेरी \ प्लगइन्स \ प्लेटफॉर्म * .dll', 'प्लेटफॉर्म'),]

यह समाधान जिम जी और क्रिप्प्लेडटेबल के उत्तरों पर आधारित है


डीआईआर platforms बनाएं और qwindows.dll को कॉपी करें, platforms और app.exe एक ही डीआईआर में हैं

cd app_dir mkdir platforms xcopy qwindows.dll platforms\qwindows.dll

फ़ोल्डर संरचना + app.exe + platforms\qwindows.dll


मुझे एक अप्रत्याशित लेकिन अंतर्ज्ञानी फिक्स मिला। यदि आप qwindows.dll की प्रतिलिपि बनाते हैं और चिपकाते हैं, जिसे आप अपने एप्लिकेशन को "प्लेटफॉर्म" नामक फ़ोल्डर में रिलीज़ करने के लिए उपयोग किए गए कंपाइलर के बिन में पाए जाते हैं, तो आप उस फ़ोल्डर को उसी एप्लिकेशन में उसी स्थान पर ले जा सकते हैं जैसे आपके एप्लिकेशन और जादू की तरह यह काम करता है।

इसके अलावा एक और उपयोगी टिप्स, क्यूटी प्लेटफ़ॉर्म कंसोल अनुप्रयोगों के साथ आता है जो आपके परिनियोजित निष्पादन योग्य के फ़ोल्डर में सभी निर्भरताओं (qwindows.dll और libEGL.dll जैसे) को जोड़ देगा। विंडोज़ के लिए एप्लिकेशन को विंडईक्लिक कहा जाता है और दस्तावेज यहां http://doc.qt.io/qt-5/windows-deployment.html पाया जा सकता है। इस एप्लिकेशन ने मुझे इतना समय बचाया और यह वास्तव में आपके निष्पादन योग्य को तैनात करने का सही तरीका है, ताकि कुछ भी याद न हो।


मुझे एक ही समस्या थी और कई चीजों को लागू करके इसे हल किया गया। पहला, अगर यह एक प्रोग्राम है जिसे आपने क्यूटी के साथ किया था।

फ़ोल्डर में (मेरे मामले में) "सी: \ क्यूटी \ Qt5.10.0 \ 5.10.0 \ msvc2017_64 \ plugins" आपको अन्य फ़ोल्डर्स मिलते हैं, उनमें से एक "प्लेटफार्म" है। वह "प्लेटफार्म" फ़ोल्डर आपके .exe निष्पादन योग्य के बगल में कॉपी किया जा रहा है। अब, अगर आपको 0xc000007d त्रुटि मिलती है तो यह है कि आपने उस संस्करण को कॉपी नहीं किया था, क्योंकि यह 32 बिट या 64 हो सकता है।

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

एक और तरीका, "निर्भरता वाकर" का उपयोग करने के बजाय अपने निष्पादन योग्य फ़ाइल के बगल में अपने "सी: \ विंडोज \ System32" फ़ोल्डर से सभी .dll की प्रतिलिपि बनाना है। अपने .exe निष्पादित करें और यदि सबकुछ अच्छी तरह से लोड हो जाता है, तो आपके पास डीएलएल लाइब्रेरीज़ पर कब्जा नहीं किया गया है, जिसकी आपको आवश्यकता नहीं है या उपयोग नहीं है, अपने सभी विकल्पों के साथ .exe प्रोग्राम का उपयोग करें और .exe को बंद किए बिना आप सब मिटा दें। डीएल जिसे आपने अभी .exe के बगल में कॉपी किया है, इसलिए यदि आपके प्रोग्राम द्वारा उन। डीएल का उपयोग किया जा रहा है, तो सिस्टम आपको मिटाने नहीं देगा, केवल उन लोगों को हटा देगा जो जरूरी नहीं हैं।

मुझे आशा है कि यह समाधान आपको सेवा प्रदान करेगा।

याद रखें कि यदि आपका ऑपरेटिंग सिस्टम 64 बिट्स है, तो पुस्तकालय System32 फ़ोल्डर में होंगे, और यदि आपका ऑपरेटिंग सिस्टम 32 बिट्स है, तो वे System32 फ़ोल्डर में भी होंगे। ऐसा इसलिए होता है कि 64-बिट कंप्यूटर में 32 बिट्स वाले प्रोग्राम के साथ कोई संगतता समस्या नहीं है। SysWOW64 फ़ोल्डर में 32-बिट फ़ाइलों को बैकअप के रूप में शामिल किया गया है।


मैं इसमें भाग गया और जवाबों में से कोई भी मुझे यह तय नहीं कर सका।

मेरे सहयोगी ने अपनी मशीन पर क्यूटी (5.6.0) स्थापित किया है: सी: \ क्यूटी \ Qt5.6.0 \ 5.6 \ msvc2015 \ plugins
मेरे पास एक ही स्थान पर Qt (5.6.2) स्थापित है।

मैंने इस पोस्ट से सीखा: http://www.tripleboot.org/?p=536 , कि Qt5Core.dll में क्यूटी पहले स्थापित होने पर लिखे गए प्लगइन का स्थान है। चूंकि मेरे सहयोगी और मेरी क्यूटी निर्देशिकाएं समान थीं, लेकिन क्यूटी के विभिन्न संस्करण स्थापित किए गए थे, इसलिए एक अलग qwindows.dll फ़ाइल की आवश्यकता है। जब मैं उसके द्वारा तैनात एक exe भाग गया, यह मेरे सी: \ Qt \ Qt5.6.0 \ 5.6 \ msvc2015 \ plugins \ platforms \ qwindows.dll फ़ाइल का उपयोग करेगा। \ प्लेटफॉर्म सबफ़ोल्डर में निष्पादन योग्य के बगल में स्थित एक के बजाय।

इसके आस-पास पहुंचने के लिए, मैंने एप्लिकेशन को कोड की निम्न पंक्ति जोड़ दी जो कि Qt5Core.dll में पथ को देखने से पहले 'प्लेटफॉर्म' उपफोल्डर के लिए exe के बगल में देखने के लिए मजबूर करता है।

QCoreApplication::addLibraryPath(".");

मैंने उपर्युक्त पंक्ति को क्यूएप्लिकेशंस कॉल से पहले मुख्य विधि में जोड़ा है:

int main( int argc, char *argv[] )
{
    QCoreApplication::addLibraryPath(".");
    QApplication app( argc, argv );
    ...
    return app.exec();
}

QT_QPA_PLATFORM_PLUGIN_PATH पर्यावरण चर को% QTDIR% \ plugins \ प्लेटफ़ॉर्म पर सेट करने के लिए \ मेरे लिए काम किया

here और here भी इसका उल्लेख किया गया था।





visual-studio-2012