คำถามที่ 5.1.1: แอปพลิเคชันไม่สามารถเริ่มทำงานได้เนื่องจากปลั๊กอินแพลตฟอร์ม“ windows” ขาดหายไป


124

แก้ไข: บางคนเริ่มทำเครื่องหมายคำถามของฉันว่าซ้ำกัน อย่าลืมว่ามีคำถามที่คล้ายกันมากมายเมื่อฉันถามคำถามนี้ (ดูรายการด้านล่าง) อย่างไรก็ตามคำตอบเหล่านี้ไม่สามารถแก้ปัญหาของฉันได้ หลังจากค้นหามานานฉันพบความคิดเห็นที่ผู้ใช้ทุกคนเพิกเฉยที่ชี้ไปที่ lib ที่หายไป หลายเดือนต่อมาความคิดเห็นถูกเปลี่ยนเป็นคำตอบ อย่างไรก็ตามเมื่อฉันตอบคำถามนี้ด้วยตัวเองฉันตั้งใจจะช่วยคนอื่นโดยการให้คำตอบโดยตรง สิ่งนี้ไม่ควรลืมและจนถึงตอนนี้คำตอบของฉันก็ช่วยผู้คนมากมาย ดังนั้นคำถามของฉันจะไม่ซ้ำกันอย่างแน่นอน โดยวิธีการ: คำตอบที่ได้รับการยอมรับในลิงก์ที่ให้ไว้ด้านบนไม่สามารถแก้ปัญหาได้ !


ใช่ฉันใช้การค้นหา:

ไม่สามารถโหลดปลั๊กอินแพลตฟอร์ม "windows" แพลตฟอร์มที่ใช้งานได้คือ: ข้อผิดพลาด

การปรับใช้แอปพลิเคชัน Qt C ++ จากข้อผิดพลาด Visual Studio qwindows.dll

ล้มเหลวในการโหลดปลั๊กอินแพลตฟอร์ม "windows" แพลตฟอร์มที่ใช้ได้คือ windows น้อยที่สุด

อย่างไรก็ตามในกรณีของฉันปัญหายังคงมีอยู่ ฉันใช้ Qt 5.1.1 กับ Visual Studio 2012 และพัฒนาแอปพลิเคชันของฉันบน Windows 7 ด้วย Qt Creator 2.8.1 แอปพลิเคชันถูกรวบรวมในโหมด "Release" และสามารถดำเนินการได้หากเริ่มต้นโดยตรงกับ Qt Creator

อย่างไรก็ตามเมื่อเริ่มจากโฟลเดอร์ "release" - ฉันได้รับข้อความต่อไปนี้:

แอปพลิเคชันนี้ไม่สามารถเริ่มทำงานได้เนื่องจากไม่พบหรือโหลดปลั๊กอินแพลตฟอร์ม Qt "windows" ปลั๊กอินแพลตฟอร์มที่มี ได้แก่ : น้อยที่สุด, ปิดหน้าจอ, หน้าต่าง

โครงสร้างโฟลเดอร์มีลักษณะดังนี้:

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

Platforms คือโฟลเดอร์ที่คัดลอกโดยตรงจากQt \ Qt5.1.1 \ 5.1.1 \ msvc2012 \ plugins \ platformsรวมถึงเช่น qwindows.dll ไม่สำคัญว่าฉันจะเปลี่ยนชื่อเป็น "แพลตฟอร์ม" เหมือนที่ผู้ใช้รายอื่นทำหรือไม่ Qt ยังไม่พบ "แพลตฟอร์มปลั๊กอิน windows" ความผิดพลาดของฉันอยู่ที่ไหน?


5
ฉันมีปัญหาที่คล้ายกัน Windows 8.1 Qt 5.3.1 MinGW 32, การเชื่อมโยงแบบไดนามิก แก้ไขได้โดยคัดลอก DLL จากโฟลเดอร์ของ Qt ไปที่ ../MyApp/platforms/qwindows.dll หมายเหตุ: ไม่มี "ปลั๊กอิน" dir ในเส้นทาง
Dmitriy


ส. ปัญหาที่คล้ายกันโปรดใช้เครื่องมือDependsซึ่งจะแสดงการพึ่งพา DLL และปัญหาที่เกิดจากปัญหาเหล่านี้ คุณสามารถใช้เครื่องมือนี้สำหรับการวิเคราะห์แบบคงที่ของไฟล์ exe หรือ dll แต่ยังใช้เพื่อแสดงการเริ่มต้นของแอปพลิเคชันที่มี DLL ที่โหลดแบบไดนามิก
Flovdis

ใช้ windeployQt
CrippledTable

คำตอบ:


64

เอาล่ะตามที่โพสต์ไว้ที่นี่https://stackoverflow.com/a/17271172/1458552โดยไม่ได้รับความสนใจจากผู้ใช้รายอื่น:

libEGL.dllหายไป! แม้ว่าจะไม่ได้รับการรายงานเมื่อพยายามเริ่มแอปพลิเคชัน (มีการรายงาน * .dlls อื่น ๆ ทั้งหมดเช่น Qt5Gui.dll)


2
ในกรณีของฉัน: Qt \ Qt5.1.1 \ 5.1.1 \ msvc2012 \ bin (แน่นอนขึ้นอยู่กับเวอร์ชัน Visual Studio ของคุณ)
ไม่ระบุชื่อ

8
คุณรู้ได้อย่างไรว่า dll ที่หายไปคือ libEGL
user1493046

4
คุณประหยัดเวลาฉัน! มีปัญหาเดียวกันนี้ใน Qt 5.3.1
tarabyte

4
@ user1493046 ฉันจัดการสร้างซ้ำโดยใช้ขึ้นอยู่กับโหมดการทำโปรไฟล์ (F7) หลังจากแอปเริ่มทำงานและแสดงข้อผิดพลาด libEGL.dll จะปรากฏในรายการการอ้างอิง
lapis

17
การเพิ่ม libEGL.dll ไม่ได้ผล อย่างไรก็ตามการตั้งค่าตัวแปรสภาพแวดล้อมต่อไปนี้ใช้ได้ผลสำหรับฉัน: QT_QPA_PLATFORM_PLUGIN_PATH =% QTDIR% \ plugins \ platforms \
arsalank2

36

ฉันสร้างไดเร็กทอรีแพลตฟอร์มถัดจากตำแหน่ง exe ของฉันและใส่ qwindows.dll ไว้ข้างใน แต่ฉันยังคงได้รับ "ปลั๊กอินแพลตฟอร์มล้มเหลว" windows "แพลตฟอร์มที่ใช้ได้คือ: windows" เกิดข้อผิดพลาด

ฉันได้คัดลอก qwindows.dll จาก C: \ Qt \ Qt5.1.1 \ Tools \ QtCreator \ bin \ plugins \ platforms ซึ่งไม่ใช่ตำแหน่งที่ถูกต้อง ฉันดูบันทึกการแก้ไขข้อบกพร่องจากการทำงานใน Qt Creator และพบว่าแอปของฉันกำลังมองหาใน C: \ Qt \ Qt5.1.1 \ 5.1.1 \ mingw48_32 \ plugins \ platforms เมื่อมันทำงานในดีบักเกอร์

เมื่อฉันคัดลอกจาก C: \ Qt \ Qt5.1.1 \ 5.1.1 \ mingw48_32 \ plugins \ platforms ทุกอย่างทำงานได้ดี


39
การตั้งค่าตัวแปรสภาพแวดล้อมต่อไปนี้ใช้ได้ผลสำหรับฉัน: QT_QPA_PLATFORM_PLUGIN_PATH =% QTDIR% \ plugins \ platforms \
arsalank2

การตั้งค่า QT_QPA_PLATFORM_PLUGIN_PATH ใช้ได้ผลสำหรับฉัน ขอบคุณ @ arsalank2
Shreekant

24

รุ่นนี้อาจไม่มีไลบรารี / ปลั๊กอินหรือไลบรารีอยู่ในไดเร็กทอรีที่ไม่ถูกต้องและหรือจากไดเร็กทอรีที่ไม่ถูกต้อง

Qt คำตอบที่ต้องการ: ใช้windeployqt windeployqtดูย่อหน้าสุดท้ายสำหรับคำอธิบาย

คำตอบด้วยตนเอง:

สร้างโฟลเดอร์ชื่อ "platform" ในไดเร็กทอรีเดียวกับไฟล์ application.exe ของคุณ คัดลอกและวาง qwindows.dll ที่พบใน / bin ของคอมไพเลอร์ใดก็ตามที่คุณใช้ปล่อยแอปพลิเคชันของคุณลงในโฟลเดอร์ "แพลตฟอร์ม" มันใช้งานได้เหมือนเวทมนตร์ หากไม่มี. dll ให้ตรวจสอบปลั๊กอิน / แพลตฟอร์ม / (ที่มีปลั๊กอิน / อยู่ในไดเร็กทอรีเดียวกับ bin /) <- ความคิดเห็นของ PfunnyGuy

ดูเหมือนว่าปัญหาทั่วไปคือ. dll ถูกนำมาจากถังคอมไพเลอร์ที่ไม่ถูกต้อง อย่าลืมคัดลอก qwindows.dll จากคอมไพเลอร์เดียวกับที่ใช้ปล่อยแอปของคุณ

Qt มาพร้อมกับแอปพลิเคชันคอนโซลแพลตฟอร์มที่จะเพิ่มการอ้างอิงทั้งหมด (รวมถึง qwindows.dll และ libEGL.dll) ลงในโฟลเดอร์ของไฟล์ปฏิบัติการที่คุณปรับใช้ นี่เป็นวิธีการปรับใช้แอปพลิเคชันของคุณดังนั้นคุณจึงไม่พลาดไลบรารีใด ๆ (ซึ่งเป็นปัญหาหลักสำหรับคำตอบทั้งหมดนี้) แอพลิเคชันสำหรับ Windows ที่เรียกว่าwindeployqt อาจมีแอปคอนโซลการปรับใช้สำหรับแต่ละ OS


1
นี่คือสิ่งที่ฉันต้องการ: หมายเหตุ qwindows.dll ไม่ได้อยู่ใน bin / ของการติดตั้งแพลตฟอร์ม Qt ของคุณ แต่อยู่ในปลั๊กอิน / แพลตฟอร์ม / โดยมีปลั๊กอิน / อยู่ในไดเร็กทอรีเดียวกับ bin /
PfunnyGuy

1
ขอบคุณ! โดยสรุปไฟล์คือ: Qt5Core.dll, Qt5Gui.dll, Qt5Widgets.dll และ YourApp.exe ในไดเร็กทอรีหลักและ platform \ qwindows.dll และ platforms \ libEGL.dll ในไดเรกทอรีย่อย
Pierre

1
windeployqt เป็นคำตอบที่ถูกต้อง ฉันใช้มันและคัดลอกทุกอย่างที่จำเป็นถัดจาก. exe มันลบการคาดเดาที่จะรู้ว่า dll ใดที่จำเป็นและสิ่งใดที่ไม่ต้องการ
H. Al-Amri

14

การตั้งค่าQT_QPA_PLATFORM_PLUGIN_PATHตัวแปรสภาพแวดล้อมยัง% QTDIR% \ ปลั๊กอิน \ แพลตฟอร์ม \ ทำงานให้ฉัน

มีการกล่าวถึงที่นี่และที่นี่ด้วย


3
แม้ว่าคำตอบนี้อาจทำให้ใช้งานได้กับเครื่องปัจจุบันของคุณ แต่ก็ไม่ได้ช่วยให้ผู้อื่นที่พยายามปรับใช้โปรแกรมของตนกับเครื่องอื่น ๆ และจำเป็นต้องระบุเฉพาะไลบรารีที่ขาดหายไป / จำเป็น
RTbecard

1
ในปี 2017 สิ่งนี้ได้ผลสำหรับฉัน ฉันจะไม่ปรับใช้แอปพลิเคชันใด ๆ !. ด้วยผู้สร้าง Qt เพียงแค่เปิดไฟล์ใหม่หรือโปรเจ็กต์ ... \ Qt วิดเจ็ตแอปพลิเคชันจากนั้นเรียกใช้และล้มเหลวด้วยข้อความเดียวกัน การตั้งค่าตัวแปรนี้ช่วยฉันได้
Phiber

เพียงแค่คัดลอกโฟลเดอร์ปลั๊กอินไว้ที่ใดที่หนึ่งข้าง "distro" ชั่วคราวของคุณแล้วชี้ env var ไป - ก็น่าจะใช้ได้ (ไม่จำเป็นต้องใช้ "QTDIR") :)
mlvljr

9

ฉันพบสิ่งนี้และไม่มีคำตอบใดที่ฉันสามารถหาคำตอบได้สำหรับฉัน

วิทยาลัยของฉันติดตั้ง Qt (5.6.0) ในเครื่องของเขาที่: C: \ Qt \ Qt5.6.0 \ 5.6 \ msvc2015 \ plugins
ฉันติดตั้ง Qt (5.6.2) ในตำแหน่งเดียวกัน

ฉันเรียนรู้จากโพสต์นี้: http://www.tripleboot.org/?p=536ว่า Qt5Core.dll มีตำแหน่งของปลั๊กอินที่เขียนถึงเมื่อติดตั้ง Qt ครั้งแรก เนื่องจากเพื่อนร่วมงานของฉันและไดเร็กทอรี Qt ของฉันเหมือนกัน แต่มีการติดตั้ง Qt เวอร์ชันต่างกันจึงจำเป็นต้องใช้ไฟล์ qwindows.dll อื่น เมื่อฉันเรียกใช้ exe ที่เขาปรับใช้มันจะใช้ไฟล์ C: \ Qt \ Qt5.6.0 \ 5.6 \ msvc2015 \ plugins \ platforms \ qwindows.dll ของฉันแทนที่จะเป็นไฟล์ที่อยู่ถัดจากไฟล์ปฏิบัติการในโฟลเดอร์ย่อย.

เพื่อหลีกเลี่ยงสิ่งนี้ฉันได้เพิ่มบรรทัดของรหัสต่อไปนี้ลงในแอปพลิเคชันซึ่งดูเหมือนว่าจะบังคับให้ดูถัดจาก exe สำหรับโฟลเดอร์ย่อย 'แพลตฟอร์ม' ก่อนที่จะดูเส้นทางใน Qt5Core.dll

QCoreApplication::addLibraryPath(".");

ฉันเพิ่มบรรทัดด้านบนในวิธีการหลักก่อนการเรียกใช้ QApplication ดังนี้:

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

1
อันนี้ใช้ได้ผลสำหรับฉัน ... แต่โปรดทราบว่าคุณอาจต้องการqwindowsd.dllในไดเร็กทอรี "แพลตฟอร์ม" หากคุณอยู่ในสถานการณ์เช่นนี้คุณกำลังแชร์ดีบัก
บิวด์

สิ่งนี้ใช้ได้ผลสำหรับฉันเพราะการพูดถึง qwindowsd.dll ฉันทราบว่าแอปของฉันถูกคอมไพล์ในโหมดดีบักและฉันได้ติดตั้งไลบรารี Qtxxxd.dll แต่ใช้ qwindows.dll ในโฟลเดอร์แพลตฟอร์ม
Gustavo Rodríguez

6

สร้าง dir platforms และคัดลอกqwindows.dllไปplatformsและapp.exeอยู่ใน dir เดียวกัน

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

โครงสร้างโฟลเดอร์ + app.exe + platforms\qwindows.dll


มีการกล่าวถึงในคำถามที่ว่า "Platforms คือโฟลเดอร์ที่คัดลอกโดยตรงจาก Qt \ Qt5.1.1 \ 5.1.1 \ msvc2012 \ plugins \ platforms รวมถึงเช่น qwindows.dll"
parasietje

แอปพลิเค @parasietje ที่กำลังมองหาในไดเรกทอรีqwindows.dll platformsฉันโพสต์สิ่งนี้เพราะฉันได้แก้ไขแล้ว คุณกำลังทำแบบทดสอบก่อนที่จะลงคะแนนหรือไม่?
KunMing Xie

คำตอบของคุณไม่ตอบคำถามเดิม คำตอบของคุณบ่งบอกถึงบางสิ่งที่ผู้โพสต์ต้นฉบับได้ลองใช้แล้ว
parasietje

3

ฉันพบทางออกอื่น สร้าง qt.conf ในโฟลเดอร์แอพดังต่อไปนี้:

[Paths]
Prefix = .

จากนั้นคัดลอกโฟลเดอร์ปลั๊กอินไปยังโฟลเดอร์แอพและมันก็ใช้ได้สำหรับฉัน


โอเคฉันอยู่ในสภาพแวดล้อม minGW, CMake, Qt 5.12 ซึ่งไม่สามารถใช้เครื่องมือ windeploy-tool ได้ แพลตฟอร์มโฟลเดอร์อยู่ที่นั่น แต่ใช้งานไม่ได้ การแทนที่ด้วย Qt-lib ก็ไม่ช่วยเช่นกัน แก้ไขโดยใช้เคล็ดลับของคุณ (หลังจากคัดลอกโฟลเดอร์) ขอบคุณ!
Marcel Petrick

2

คำตอบเหล่านี้ส่วนใหญ่มีข้อมูลที่ดี (ถูกต้อง) แต่ในกรณีของฉันยังมีบางอย่างที่ขาดหายไป

แอปของฉันสร้างขึ้นเป็นไลบรารี (dll) และเรียกโดยแอปพลิเคชันที่ไม่ใช่ Qt ฉันเคยwindeployqt.exeตั้งค่า Qt dlls, แพลตฟอร์ม, ปลั๊กอิน ฯลฯ ในไดเร็กทอรีการติดตั้ง แต่ยังไม่พบแพลตฟอร์ม หลังจากการทดลองบางอย่างฉันพบว่าไดเร็กทอรีการทำงานของแอปพลิเคชันถูกตั้งค่าเป็นโฟลเดอร์อื่น ดังนั้นฉันจึงคว้าไดเร็กทอรีที่ dll "อาศัย" ใช้GetModuleHandleExAและเพิ่มไดเร็กทอรีนั้นลงในพา ธ ไลบรารี Qt ที่รันไทม์โดยใช้

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

สิ่งนี้ได้ผลสำหรับฉัน


2

สำหรับฉันวิธีแก้ปัญหาคือการแก้ไขPATHตัวแปร มี Anaconda3 \ Library \ bin เป็นหนึ่งในเส้นทางแรก ไดเร็กทอรีนี้มีไลบรารี Qt บางส่วนแต่ไม่ใช่ทั้งหมด เห็นได้ชัดว่านั่นเป็นปัญหา การย้าย C: \ Programs \ Qt \ 5.12.3 \ msvc2017_64 \ bin ไปด้านหน้าPATHช่วยแก้ปัญหาให้ฉันได้


1

ฉันมีปัญหานี้ขณะใช้ QT 5.6, Anaconda 4.3.23, python 3.5.2 และ pyinstaller 3.3 ฉันได้สร้างโปรแกรม python ด้วยอินเทอร์เฟซที่พัฒนาโดยใช้ QTcreator แต่ต้องปรับใช้กับคอมพิวเตอร์เครื่องอื่นดังนั้นฉันจึงจำเป็นต้องสร้างไฟล์ปฏิบัติการโดยใช้ pyinstaller

ฉันพบว่าปัญหาได้รับการแก้ไขในคอมพิวเตอร์ของฉันหากฉันตั้งค่าตัวแปรสภาพแวดล้อมต่อไปนี้:

QT_QPA_PLATFORM_PLUGIN_PATH:% QTDIR% \ plugins \ platforms \

QTDIR: C: \ Miniconda3 \ pkgs \ qt-5.6.2-vc14_3 \ Library

แต่วิธีนี้ใช้ได้กับพีซีของฉันที่ติดตั้ง conda และ qt ในโฟลเดอร์เหล่านั้นเท่านั้น

ในการแก้ปัญหานี้และทำให้สามารถเรียกใช้งานได้บนคอมพิวเตอร์ทุกเครื่องฉันต้องแก้ไข ".spec" (ไฟล์ที่สร้างขึ้นครั้งแรกโดย pyinstaller) เพื่อรวมบรรทัดต่อไปนี้:

ข้อมูล = [('C: \ Miniconda3 \ pkgs \ qt-5.6.2-vc14_3 \ Library \ plugins \ platforms * .dll', 'platforms'),]

โซลูชันนี้ขึ้นอยู่กับคำตอบของ Jim G. และ CrippledTable


1

ฉันมีปัญหาเดียวกันและแก้ไขได้โดยใช้หลายสิ่ง อย่างแรกถ้าเป็นโปรแกรมที่คุณทำกับ Qt.

ในโฟลเดอร์ (ในกรณีของฉัน) ของ "C: \ Qt \ Qt5.10.0 \ 5.10.0 \ msvc2017_64 \ plugins" คุณพบโฟลเดอร์อื่นหนึ่งในนั้นคือ "แพลตฟอร์ม" โฟลเดอร์ "แพลตฟอร์ม" นั้นจะถูกคัดลอกถัดจากไฟล์ปฏิบัติการ. exe ของคุณ ตอนนี้หากคุณได้รับข้อผิดพลาด 0xc000007d คือคุณไม่ได้คัดลอกเวอร์ชันที่เป็นอยู่เนื่องจากอาจเป็น 32 บิตหรือ 64

หากคุณดำเนินการต่อโดยมีข้อผิดพลาดคือคุณขาดไลบรารีเพิ่มเติม ด้วยโปรแกรม "Dependency Walker" คุณสามารถตรวจจับบางโฟลเดอร์ที่หายไปได้ แน่นอนมันจะบ่งบอกให้คุณทราบว่าคุณต้องการ NVIDIA .dll และจะบอกตำแหน่งของคุณ

อีกวิธีหนึ่งแทนที่จะใช้ "Dependency Walker" คือการคัดลอก. dll ทั้งหมดจากโฟลเดอร์ "C: \ Windows \ System32" ที่อยู่ถัดจากไฟล์ปฏิบัติการของคุณ ดำเนินการ. exe ของคุณและหากทุกอย่างโหลดได้ดีดังนั้นคุณจึงไม่มีพื้นที่ว่างในไลบรารี dll ที่คุณไม่ต้องการหรือใช้งานให้ใช้โปรแกรม. exe กับตัวเลือกทั้งหมดของคุณและโดยไม่ต้องปิด. exe ที่คุณทำจะลบไฟล์. dll ที่คุณเพิ่งคัดลอกถัดจาก. exe ดังนั้นหากโปรแกรมของคุณใช้. dll เหล่านั้นระบบจะไม่ยอมให้คุณลบออกเพียง แต่ลบไฟล์ที่ไม่จำเป็นเท่านั้น

ฉันหวังว่าโซลูชันนี้จะตอบสนองคุณได้

โปรดจำไว้ว่าหากระบบปฏิบัติการของคุณเป็น 64 บิตไลบรารีจะอยู่ในโฟลเดอร์ System32 และหากระบบปฏิบัติการของคุณเป็น 32 บิตระบบจะอยู่ในโฟลเดอร์ System32 ด้วย สิ่งนี้เกิดขึ้นเพื่อให้ไม่มีปัญหาความเข้ากันได้กับโปรแกรมที่มีขนาด 32 บิตในคอมพิวเตอร์ 64 บิต โฟลเดอร์ SysWOW64 มีไฟล์ 32 บิตเป็นข้อมูลสำรอง


มันได้ผล แต่เป็นเหมือนวิธีแก้ปัญหาชั่วคราว เป็นไปได้ไหมที่จะทำบางอย่างโดยที่คุณไม่จำเป็นต้องคัดลอกโฟลเดอร์ของแพลตฟอร์ม?
Oleg Yablokov

0

สำหรับแพลตฟอร์ม MinGW และหากคุณกำลังรวบรวมเป้าหมายการดีบักโดย CMakeLists.txt ที่เขียนขึ้นด้วยมือคุณจะต้องเพิ่ม qwindows.dll ไปยังแพลตฟอร์ม dir ด้วย ไฟล์ปฏิบัติการ windeployqt ทำงานได้ดี แต่ดูเหมือนว่าด้วยเหตุผลแปลก ๆ การสร้าง CMake จึงต้องการตัวแปรรีลีสเช่นกัน โดยสรุปจะเป็นการดีกว่าที่จะมีทั้ง qwindows.dll และ qwindowsd.dll ในไดเรกทอรีแพลตฟอร์มของคุณ ฉันไม่สังเกตเห็นผลลัพธ์แปลก ๆ เหมือนกันเมื่อนำเข้าโครงการ CMake ใน QtCreator จากนั้นเรียกใช้ขั้นตอนการสร้าง การคอมไพล์ในบรรทัดคำสั่งโครงการ CMake ดูเหมือนจะทริกเกอร์การพึ่งพา qwindows.dll หากตั้งค่าที่ถูกต้องสำหรับเป้าหมาย Debug (qwindowsd.dll)


0

ใช้ไฟล์แบตช์นี้: 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 ใน explorer
  • หรือโทรRunWithQt gui.exeจากบรรทัดคำสั่ง

0

หากคุณติดตั้ง Anaconda ฉันขอแนะนำให้คุณถอนการติดตั้งและลองติดตั้งแพ็คเกจ python จากแหล่งที่มาฉันแก้ไขปัญหานี้ด้วยวิธีนี้


0

แอปพลิเคชันqtbase / bin / windeployqt.exeปรับใช้แอปพลิเคชันของคุณโดยอัตโนมัติ หากคุณเริ่มพร้อมต์พร้อมกับสภาพแวดล้อมที่ตั้งค่าอย่างถูกต้องมันจะปรับใช้ไปยังไดเร็กทอรีปัจจุบัน คุณพบตัวอย่างของสคริปต์:

@echo off
set QTDIR=E:\QT\5110\vc2017

set INCLUDE=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\ATLMFC\include;S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\include;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\include\um;C:\Program Files (x86)\Windows Kits\10\include\10.0.14393.0\ucrt;C:\Program Files (x86)\Windows Kits\10\include\10.0.14393.0\shared;C:\Program Files (x86)\Windows Kits\10\include\10.0.14393.0\um;C:\Program Files (x86)\Windows Kits\10\include\10.0.14393.0\winrt;C:\Program Files (x86)\Windows Kits\10\include\10.0.14393.0\cppwinrt

set LIB=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\ATLMFC\lib\x86;S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\lib\x86;C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\lib\um\x86;C:\Program Files (x86)\Windows Kits\10\lib\10.0.14393.0\ucrt\x86;C:\Program Files (x86)\Windows Kits\10\lib\10.0.14393.0\um\x86;

set LIBPATH=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\ATLMFC\lib\x86;S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\lib\x86;S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.15.26726\lib\x86\store\references;C:\Program Files (x86)\Windows Kits\10\UnionMetadata\10.0.17134.0;C:\ProgramFiles (x86)\Windows Kits\10\References\10.0.17134.0;C:\Windows\Microsoft.NET\Framework\v4.0.30319;

Path=%QTDIR%\qtbase\bin;%PATH%
set VCIDEInstallDir=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\VC\
set VCINSTALLDIR=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\
set VCToolsInstallDir=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.11.25503\
set VisualStudioVersion=15.0
set VS100COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\
set VS110COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools\
set VS120COMNTOOLS=S:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\
set VS150COMNTOOLS=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\Tools\
set VS80COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio 8\Common7\Tools\
set VS90COMNTOOLS=c:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\Tools\
set VSINSTALLDIR=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\
set VSSDK110Install=C:\Program Files (x86)\Microsoft Visual Studio 11.0\VSSDK\
set VSSDK150INSTALL=S:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VSSDK
set WindowsLibPath=C:\Program Files (x86)\Windows Kits\10\UnionMetadata;C:\Program Files (x86)\Windows Kits\10\References
set WindowsSdkBinPath=C:\Program Files (x86)\Windows Kits\10\bin\
set WindowsSdkDir=C:\Program Files (x86)\Windows Kits\10\
set WindowsSDKLibVersion=10.0.14393.0\
set WindowsSdkVerBinPath=C:\Program Files (x86)\Windows Kits\10\bin\10.0.14393.0\
set WindowsSDKVersion=10.0.14393.0\
set WindowsSDK_ExecutablePath_x64=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\x64\
set WindowsSDK_ExecutablePath_x86=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\

mkdir C:\VCProjects\Application\Build\VS2017_QT5_11_32-Release\setup
cd C:\VCProjects\Application\Build\VS2017_QT5_11_32-Release\setup
copy /Y ..\Release\application.exe .
windeployqt application.exe
pause

0

สมมติว่าคุณต้องการมีCGAL-Demosแบบพกพา ดังนั้นคุณจะมีโฟลเดอร์ "CGAL" และในนั้น 1 โฟลเดอร์ย่อยชื่อ "lib": ทั้งหมด (ทั่วไป) support-dll สำหรับโปรแกรมใด ๆ ในโฟลเดอร์ CGAL ไปที่นี่ ในตัวอย่างของเรานี่คือDll-Download : เพียงแค่แตกไฟล์ลงในไดเร็กทอรี "lib" ยิ่งคุณเลื่อนลงในหน้าสาธิตมากเท่าไหร่เนื้อหาก็ยิ่งน่าประทับใจมากขึ้นเท่านั้น ในกรณีของฉันไฟล์สาธิตรูปทรงหลายเหลี่ยมดูเหมือนจะถูกต้อง หากสิ่งนี้ทำงานบนโน้ตบุ๊กอายุ 10+ ของฉันฉันก็ประทับใจ ดังนั้นฉันจึงสร้างโฟลเดอร์ "สาธิต" ในไดเรกทอรี "CGAL" พร้อมกับ "lib" ตอนนี้สร้างไฟล์. cmd ในโฟลเดอร์นั้น ฉันตั้งชื่อของฉันว่า "Polyhedron.cmd" ดังนั้นเราจึงมีโครงสร้างไดเร็กทอรีดังนี้:

 CGAL - the bag for all the goodies
  lib - all libraries for all CGAL-packages
 demo - all the demos I'm interested in
[...] - certainly some other collections, several apps per folder...
Polyhedron.cmd - and a little script for every Qt-exe to make it truly portable.

ในตัวอย่างเล็ก ๆ น้อย ๆ นี้ "Polyhedron.cmd" มีข้อความต่อไปนี้:

@echo off
set "me=%~dp0"
set PATH=%me%lib
set "QT_PLUGIN_PATH=%me%lib\plugins"
start /b "CGAL Polyhedron Demo" "%me%demo\polyhedron\polyhedron_3.exe"

สคริปต์ทั้งหมดสามารถเหมือนกันนอกเหนือจากบรรทัดสุดท้ายอย่างชัดเจน ข้อแม้เดียวคือ: "DOS-Window" จะยังคงเปิดอยู่ตราบเท่าที่คุณใช้โปรแกรมจริง ปิดหน้าต่างเชลล์และคุณฆ่า * .exe ด้วย ไม่ว่าคุณจะคัดลอกโฟลเดอร์ "CGAL" ที่ใดก็ตามเนื่องจาก "% ~ dp0" - เขียนแปลก ๆ แสดงถึงเส้นทางแบบเต็มไปยังไฟล์ * .cmd ที่เราเริ่มต้นโดยมีการต่อท้าย "\" ดังนั้น "% me% lib" จึงเป็นเส้นทางแบบเต็มไปยังไลบรารีจริงเสมอ ("CGAL \ lib" ในกรณีของฉัน) 2 บรรทัดถัดไปบอก Qt ว่าไฟล์ "รันไทม์" อยู่ที่ไหน นี่จะเป็นไฟล์ "qwindows.dll" สำหรับโปรแกรม Windows-Qt เป็นอย่างน้อยรวมทั้ง * .dlls จำนวนเท่าใดก็ได้ ถ้าจำไม่ผิด Dll-library (อย่างน้อยก็ตอนที่ดาวน์โหลด) มี "bug" เล็กน้อยเนื่องจากมี "platform" -directory ที่มี qwindows.dll อยู่ในนั้นย้ายไปที่ "ปลั๊กอิน" หาก Qt-app แอปQt ใด ๆไม่พบ "qwindows.dll" จะไม่พบ "windows" และคาดว่าจะอยู่ในไดเร็กทอรีชื่อ "แพลตฟอร์ม" ในไดเร็กทอรี "ปลั๊กอิน" ซึ่งจะต้องได้รับการแจ้งเตือนจากระบบปฏิบัติการที่ทำงานบน ... และหาก "QT_PLUGIN_PATH" ไม่ได้ชี้ไปที่ผู้ช่วยทั้งหมดของคุณ จำเป็นโปรแกรม Qt บางโปรแกรมจะยังคงทำงานโดยไม่มีโพรบ และบางคนบ่นว่าหายไป * .dlls ที่คุณไม่เคยได้ยิน ...


0

สำหรับใครก็ตามที่มาจาก QT เวอร์ชัน 5.14.0 ฉันใช้เวลา 2 วันในการค้นหาสถิติข้อผิดพลาดชิ้นนี้:

windeployqt ไม่ทำงานสำหรับ MinGW QTBUG-80763 จะได้รับการแก้ไขใน 5.14.1

https://wiki.qt.io/Qt_5.14.0_Known_Issues

ดังนั้นจงตระหนัก การใช้ windeployqt กับ MinGW จะให้ข้อผิดพลาดเดียวกันกับที่ระบุไว้ที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.