c++ एप्लिकेशन प्रारंभ करने में विफल रहा क्योंकि यह क्यू प्लस प्लगइन "विंडो"




qt dll (9)

मैंने उन सारे सारे प्रश्नों के बारे में देखा है जो स्टैक अतिप्रवाह से संबंधित हैं, और समाधान में से कोई भी मेरी मदद करने में प्रतीत नहीं होता है

मैं इस सेटअप के साथ एक क्यूटी अनुप्रयोग का निर्माण कर रहा हूं:

  • विंडोज 7 प्रोफेशनल एक्स 64
  • विजुअल स्टूडियो 2012
  • क्यूटी 5.2.0 configure -developer-build -debug-and-release -opensource -nomake examples -nomake tests -platform win32-msvc2012 -no-opengl साथ configure -developer-build -debug-and-release -opensource -nomake examples -nomake tests -platform win32-msvc2012 -no-opengl
  • प्रोजेक्ट का उपयोग क्यूटीएसिंगलएपिकेशन (क्यूटी-समाधान) करता है
  • एप्लिकेशन एक 32 बिट अनुप्रयोग है
  • निम्नलिखित के साथ क्यूमेक चलाएं: -मेकफ़ाइल -एसपीईसी वाई -32-एमएसवीसी2012
  • QMAKE_CXX += /D_USING_V110_SDK71_ का उपयोग करता है

मैं अपने विकास मशीन (ऊपर वर्णित) पर अपने प्रोग्राम को ठीक कर सकता हूं और चला सकता हूं; मैं देव मशीन पर प्रोग्राम फाइल निर्देशिका से पैकेज को स्थापित और चला सकता हूं।

जब मैं विन्डोज़ विस्टा मशीन (एकाधिक मशीनों) को स्थापित और चलाता हूं

  • VC ++ redist 2012 11.0.61030.0 स्थापित
  • VC ++ redist 2010 10.0.40219 स्थापित
  • प्लस 2005, 2008 में redist के संस्करण

(विंडोज 7 की साफ स्थापना पर भी विफल रहता है)

मुझे मिला:

Application failed to start because it could not find or load the QT platform plugin "windows"

इसलिए मैंने निर्देशों का पालन किया और एक .platforms / निर्देशिका को जोड़ा, और कहा qwindows.dll (यह भी जोड़ा qminimal.dll और qoffscreen.dll); मैंने भी libEGL.dll, libGLESv2.dll (भले ही मुझे उनकी आवश्यकता नहीं होनी चाहिए, मुझे नहीं लगता)

एक बार मैंने qoffscreen.dll को जोड़ा है अब मुझे अतिरिक्त संदेश मिलता है: Available platform plugins are: offscreen

यदि मैं निर्भरता वाकर के माध्यम से चलाता हूं तो मुझे यह त्रुटि सूचीबद्ध किया गया है:

GetProcAddress(0x76CA0000 [KERNEL32.DLL], "GetCurrentPackageId") called from "MSVCR110.DLL" at address 0x6AC6FDFA and returned NULL. Error: The specified procedure could not be found (127).

और फिर नीचे नीचे प्राप्त करें:

GetProcAddress(0x745A0000 [UXTHEME.DLL], "BufferedPaintUnInit") called from "COMCTL32.DLL" at address 0x745FFBF8 and returned 0x745AE18C.
This application failed to start because it could not find or load the Qt platform plugin "windows".

Available platform plugins are: offscreen.

Reinstalling the application may fix this problem.

कोई भी विचार कैसे इस dll मुद्दे को ठीक करने के लिए?


यह qwindows.dll गुम है, जो आमतौर पर प्लेटफॉर्म्स में होना चाहिए, जब तक कि आप जोड़ न दें:

QCoreApplication::addLibraryPath("<yourpath>");

यदि आप यह बीटीड नहीं करते हैं, और अपने qwindows.dll कहीं और स्थान पर डालते हैं, तो क्यूटी डीएचएल के लिए अपना पाथ खोज करेगा, जो बहुत समय लग सकता है (10 सेकंड - कई मिनट)!


त्रुटि इसलिए है क्योंकि कार्यक्रम qwindows.dll नहीं मिल सकता है

qwindows.dll को platforms नामक फ़ोल्डर में होना चाहिए ताकि आपके निष्पादन योग्य से डीएलएल का पथ platforms/qwindows.dll

जबकि यह मेरे मामले में पर्याप्त नहीं था मैं अपने मुख्य () की शुरुआत में निम्नलिखित पंक्ति को जोड़ने के लिए भी था

QCoreApplication::addLibraryPath("./");

तो सब कुछ काम किया।


वैसे मैंने मेरी समस्या हल की, हालांकि मुझे यकीन नहीं है कि अंतर क्या है:

मैंने अपने क्यूटी निर्देशिका से प्रत्येक डीएलएल को मेरी एप्लिकेशन डायरेक्टरी के ./ और ./platforms दोनों में कॉपी किया है।

एप्लिकेशन को त्रुटि मिल गई, लेकिन तब दुर्घटनाग्रस्त हो गया।

VERSION.dll दुर्घटना पैदा कर रहा था (निर्भरता वॉकर में नोट किया गया), इसलिए मैंने इसे दोनों स्थानों से हटा दिया।

आवेदन शुरू हुआ, इसलिए मैंने सभी अनावश्यक डीएलएल को व्यवस्थित रूप से हटा दिया।

यह मुझे मूल रूप से उसी स्थिति में वापस ले गया था जो मूल रूप से था।

मैंने तब अपने आवेदन की स्थापना रद्द की और पुन: इंस्टॉल किया (केवल ./platforms/qwindows.dll फाइल शेष के साथ), एप्लिकेशन सही ढंग से काम करता है

इसलिए मैं मान सकता हूँ कि मेरे पास प्लेटफ़ॉर्म निर्देशिका में qwindows.dll का गलत संस्करण था।


भविष्य में इस समस्या वाले लोगों के लिए - मेरे पास गंदी थोड़ा हैक है, मेरे लिए काम किया है अपने जोखिम पर आज़माएं

प्रारंभिक तैनाती में सभी चरणों का पालन करें (त्वरित और गंदा) [ http://wiki.qt.io/Deploy_an_Application_on_Windows]

  1. Qt निर्माता को बंद करें
  2. निम्न में से C: \ Deployment \ MyApp.exe का रिलीज़ संस्करण C: \ Qt \ 5.2.1 \ mingw48_32 \ bin \ से सभी .dll फ़ाइलें C: \ Qt \ 5.2.1 \ mingw48_32 \ प्लगइन्स \
  3. (यदि आप क्यूएमएल का इस्तेमाल करते हैं) सी: \ क्यूटी \ 5.2.1 \ mingw48_32 \ qml \ नाम से सभी फ़ोल्डर्स C: \ Qt \ to C: \ QtHidden \ (यह आपके पीसी को एक स्वच्छ वातावरण में बदल देता है, बस एक जैसे 'टी क्यूटी स्थापित है)।
  4. लॉन्च करें C: \ परिनियोजन \ MyApp.exe।

अब हैक के लिए -

  1. सुरक्षा के लिए अपना फ़ोल्डर डुप्लिकेट करें
  2. अगर आपकी फाइल / बिल्ली / परिनियोजन में थी, तो / cat पर जाएं
  3. अब, परिनियोजन फ़ोल्डर हटाएं, जबकि .exe अभी भी चल रहा है।
  4. यह आपको बताएगा कि वह कुछ फ़ाइलों को नहीं हटा सकता है, इसलिए कहें (या सभी को छोड़ दें)
  5. आपके साथ जो छोड़ा गया है वह सभी। Dll फ़ाइलों की सूची है जो कि आपके .exe वास्तव में प्रयोग कर रही थी और हटा नहीं सका: सभी फाइलों की सूची और केवल उन फ़ाइलों की सूची जिसे आपको रखने की आवश्यकता है

अब आप .exe फ़ाइल को बंद कर सकते हैं। यह ठीक से तैनाती है या नहीं, यह जांचने के लिए, फ़ोल्डर में जाएं जहां आपने इसे स्थापित किया है, सी: / क्यू कहें और इसे सी: / नॉटक्यूटी (मूल रूप से क्यूटी सिस्टम को अदृश्य बनाकर) में बदल दें। यदि यह अभी काम करता है, तो यह अन्य प्रणालियों पर अधिकतर तैनाती नहीं करेगा


मेरे लिए, मुझे प्लेटफ़ॉर्म डायरेक्टरी में QT_QPA_PLATFORM_PLUGIN_PATH सेट करना होगा और फिर यह काम करेगा।

इसके लायक होने के लिए, इस समाधान का भी उल्लेख गिटहब पर किया गया था।


ध्यान दें यह समस्या भी हो सकती है यदि qwindows.dll लिए खोज पथ जो आपके ऐप में एन्कोडेड है, उस पथ को शामिल करता है जहां आपने क्यूटी स्थापित किया था। इस परिदृश्य पर विचार करें:

  1. मैं क्यूटी को c:\Qt\... स्थापित कर रहा हूँ
  2. मैं एक ऐप विकसित कर रहा हूं और इसे कहीं और सही ढंग से व्यवस्थित कर रहा हूं।
  3. यह किसी भी कंप्यूटर पर ठीक से चलाता है क्योंकि इसमें qwindows.dll को एक उपनिर्देशिका में शामिल किया गया है।
  4. मैं अपने स्थानीय क्यूटी को एक नए संस्करण में नवीनीकृत कर रहा हूं।
  5. मैं फिर से अपना ऐप चलाने की कोशिश करता हूं।

परिणाम यह त्रुटि है, क्योंकि qwindows.dll में c:\Qt\... इसकी स्थानीय निर्देशिका में एक से पहले पाया जाता है और यह उसके साथ असंगत है। बहुत कष्टप्रद।

एक समाधान qt.conf फ़ाइल को उसी निर्देशिका में अपने exe फ़ाइल के रूप में qt.conf है। मुझे नहीं पता कि यह कैसे बचें। यदि आपने अपने ऐप को परिनियोजित करने के लिए टूल windeployqt.exe का उपयोग किया है, तो आपके पास platforms नामक एक उपनिर्देशिका platforms , तो यह पर्याप्त है:

[Paths]
Plugins=.

मुझे एक ही मुद्दा मिला: 1. यह वीएस -2010 में चला सकता है; 2. यह फ़ाइलों के साथ एक फ़ोल्डर में चला सकता है: app.exe \ प्लेटफ़ॉर्म \ qwindows.dll ...

  1. लेकिन यह विकासशील एक के रूप में एक ही ओएस के साथ एक स्वच्छ मशीन पर qwindows लोड करने में विफल रहा है।

प्लेटफ़ॉर्म फ़ोल्डर को प्लगिन पर ले जाकर केवल हल: app.exe plugins \ platforms \ qwindows.dll

प्लस: qwindows.dll का नाम बदला जा सकता है जैसा कि आपको एक प्लग-इन इंटरफ़ेस द्वारा पूछता है: qt_plugin_query_metadata ()


सभी ऊपर की कोशिश की - मेरे लिए निकला यह सिर्फ इसलिए कि मेरे पास apps फ़ोल्डर में मुख्य Qt डीएलएस नहीं था

  • Qt5Core.dll
  • Qt5Widgets.dll
  • आदि

मेरे पास एक ही मुद्दा था "आवेदन शुरू करने में विफल रहा है क्योंकि यह क्यूटी प्लेटफ़ॉर्म प्लगइन" खिड़कियां "नहीं खोज सकता या लोड नहीं कर पा रहा था, मैं इसे फाइल के नीचे एप। एक्सई (मेरे ऐप निष्पादन योग्य) फ़ोल्डर में कॉपी करके तय किया था,

Qt5Core.dll, Qt5Gui.dll, Qt5Widgets.dll और qminimal.dll, qoffscreen.dll, qwindows.dll के साथ एक "प्लेटफ़ॉर्म" निर्देशिका।

मुझे उम्मीद है कि यह किसी की मदद करेगा







platform