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




windows qt (11)

मुझे एक और समाधान मिला। ऐप फ़ोल्डर में qt.conf बनाएं जैसे कि:

[Paths]
Prefix = .

और फिर प्लगइन फ़ोल्डर को ऐप फ़ोल्डर में कॉपी करें और यह मेरे लिए काम करता है।

संपादित करें: कुछ लोगों ने मेरे प्रश्न को डुप्लिकेट के रूप में चिह्नित करना शुरू कर दिया। यह मत भूलना कि जब मैंने यह पूछा तो कई समान प्रश्न मौजूद थे (उदाहरण के लिए नीचे दी गई सूची देखें)। हालांकि, इनमें से किसी भी उत्तर ने मेरी समस्या हल नहीं की । एक लंबी खोज के बाद मुझे एक टिप्पणी मिली जो लापता 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 से कॉपी किया गया फ़ोल्डर है। इससे कोई फर्क नहीं पड़ता कि मैं इसे "मंच" में बदलता हूं क्योंकि कुछ अन्य उपयोगकर्ताओं ने किया था। क्यूटी अभी भी "मंच प्लगइन विंडोज़" नहीं ढूंढ रहा है, मेरी गलती कहां है?


इस बैच फ़ाइल का उपयोग करें: RunWithQt.bat

@echo off
set QTDIR=C:\Qt\Qt5.1.1\5.1.1\msvc2012\bin
set QT_QPA_PLATFORM_PLUGIN_PATH=%QTDIR%\plugins\platforms\
start %1
  • इसका उपयोग करने के लिए, अपनी gui.exe फ़ाइल खींचें और इसे एक्सप्लोरर में RunWithQt.bat पर छोड़ दें,
  • या कमांड लाइन से RunWithQt gui.exe कॉल करें

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

फ़ोल्डर में (मेरे मामले में) "सी: \ क्यूटी \ 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-बिट फ़ाइलों को बैकअप के रूप में शामिल किया गया है।


ठीक है, जैसा कि यहां पोस्ट किया गया है https://.com/a/17271172/1458552 अन्य उपयोगकर्ताओं द्वारा अधिक ध्यान दिए बिना:

LibEGL.dll गायब था! हालांकि एप्लिकेशन को शुरू करने का प्रयास करते समय इसकी रिपोर्ट नहीं की गई है (Qt5Gui.dll जैसे अन्य सभी * .dlls की सूचना मिली है)।


मैंने अपने exe स्थान के बगल में एक प्लेटफॉर्म निर्देशिका बनाई और qwindows.dll को अंदर रखा, लेकिन मुझे अभी भी "प्लेटफ़ॉर्म प्लगइन लोड करने में विफल" विंडो मिलीं। उपलब्ध प्लेटफॉर्म हैं: विंडोज़ "त्रुटि।

मैंने cwindows.dll को C: \ Qt \ Qt5.1.1 \ Tools \ QtCreator \ bin \ plugins \ प्लेटफ़ॉर्म से कॉपी किया था, जो सही स्थान नहीं है। मैंने क्यूटी निर्माता में चलने से डीबग लॉग को देखा और पाया कि मेरा ऐप डी: \ Qt \ Qt5.1.1 \ 5.1.1 \ mingw48_32 \ plugins \ प्लेटफॉर्म पर डीबगर में चलाए जाने पर देख रहा था।

जब मैंने सी: \ Qt \ Qt5.1.1 \ 5.1.1 \ mingw48_32 \ plugins \ प्लेटफ़ॉर्म से कॉपी किया, तो सबकुछ ठीक काम करता था।


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

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


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


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

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

फ़ोल्डर संरचना + app.exe + platforms\qwindows.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', 'प्लेटफॉर्म'),]

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


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

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


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

मेरे सहयोगी ने अपनी मशीन पर क्यूटी (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();
}




visual-studio-2012