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




qt dll (8)

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

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

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

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

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

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

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

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

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

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

  • विंडोज 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 मुद्दे को ठीक करने के लिए?


मुझे यह समस्या मिली और मैंने इसे कैसे हल किया:

  1. अपेक्षित डीएलएस के सटीक पथ को देखने के लिए निर्भरता वॉकर ( http://www.dependencywalker.com/ ) का इस्तेमाल किया गया है इसे प्रयास करें क्योंकि दोनों QtCreator और QT ढांचा दोनों एक ही डीएलएस हैं और आपको सटीक उपयोग किए जाने वाले सटीक पहचानने चाहिए। ऐप के रूप में मैं एक ही फ़ोल्डर में आवश्यक सभी डीएलएल की नकल की।

  2. मैंने क्यूटी फ्रेमवर्क / प्लगइन्स से फ़ोल्डर प्लेटफ़ॉर्म की प्रतिलिपि बनाई है और ऐप के रूप में उसी फ़ोल्डर में कॉपी किया है अब ऐप ने अपने सभी डीएलएस के साथ प्लगइन / प्लेटफ़ॉर्म / फ़ोल्डर भी बना लिया है

  3. और मेरे मामले में सबसे महत्वपूर्ण कदम ऐप के रूप में एक ही फ़ोल्डर में qt.conf नामक एक फ़ाइल बनाना है इस फ़ाइल में प्लगिन का पथ होना चाहिए। मेरी qt.conf फ़ाइल में शामिल हैं:

    [पथ]
    पुस्तकालय = .. / lib / qtcreator
    प्लगइन्स = प्लगइन्स
    आयात = आयात
    Qml2Imports = qml


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

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

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

QCoreApplication::addLibraryPath("./");

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


ध्यान दें यह समस्या भी हो सकती है यदि 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=.

एप्लिकेशन होस्ट सिस्टम पर चलने में सक्षम है, चूंकि क्यूटी bin पथ सिस्टम PATH चर में है।

क्यूटी अनुप्रयोगों की तैनाती के लिए एक मानक क्यूटी उपकरण विंडोज windeployqt पर लक्षित मशीनों पर आवेदन चलाने में समर्थ होने के लिए है, जिनके पास क्यूटी इंस्टॉल नहीं है।

यह उपकरण क्यूटी डीएलएल निर्भरता के बारे में ध्यान रखता है, platforms\qwindows.dll प्रतिलिपि बनाता है और यह पुस्तकालयों की प्रतिलिपि बनाता है जो आप निर्भरता वाकर के साथ नहीं पहचान सकते, क्योंकि छवि प्लगिन और कुछ अन्य DLL रनटाइम पर लोड होते हैं।

आपको अपने वातावरण में अपने क्यूटी bin फ़ोल्डर की भी ज़रूरत नहीं है PATH सरल तैनाती:

  • कॉपी एक नया फ़ोल्डर में exe बाइनरी बना
  • उस फ़ोल्डर में खोलें cmd कंसोल
  • पूर्ण पथ का उपयोग करते हुए windeployqt कॉल करें (यदि यह सिस्टम PATH में नहीं है) और अपने निष्पादन योग्य प्रदान करें, उदाहरण के लिए:
    c:\Qt\Qt5.2.1\5.2.1\msvc2010_opengl\bin\windeployqt.exe application.exe

परिणामस्वरूप आपके पास उस फ़ोल्डर में आवेदन चलाने के लिए सभी आवश्यक क्यूटी डीएलएल हैं।

उपकरण windeployqt के विभिन्न विकल्प हैं यह qml संबंधित फाइलों को तैनाती के बारे में भी ध्यान दे सकता है

बेशक आप एमएसवीसी के पुनर्वितरण के साथ भी समस्याएं हो सकती हैं, लेकिन उनसे अलग-अलग तैनात किया जाना चाहिए और सिस्टम प्रति एक बार स्थापित करना चाहिए।

उदाहरण के लिए, केवल कुछ तृतीय पक्ष पुस्तकालयों को मैन्युअल रूप से कॉपी किया जाना चाहिए, उदाहरण के लिए ओपनएसएसएल


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

प्रारंभिक तैनाती में सभी चरणों का पालन करें (त्वरित और गंदा) [ 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 फ़ाइल को बंद कर सकते हैं। यह ठीक से तैनाती है या नहीं, यह जांचने के लिए, फ़ोल्डर में जाएं जहां आपने इसे स्थापित किया है, सी: / क्यू कहें और इसे सी: / नॉटक्यूटी (मूल रूप से क्यूटी सिस्टम को अदृश्य बनाकर) में बदल दें। यदि यह अभी काम करता है, तो यह अन्य प्रणालियों पर अधिकतर तैनाती नहीं करेगा


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

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

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


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

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







platform