Qt 5.1.1: Aplikasi gagal untuk memulai karena plugin platform "windows" tidak ada

124

Edit: Beberapa orang mulai menandai pertanyaan saya sebagai duplikat. Jangan lupa bahwa banyak pertanyaan serupa muncul ketika saya menanyakan yang satu ini (lihat misalnya daftar di bawah). Namun, tidak satu pun dari jawaban ini yang menyelesaikan masalah saya . Setelah pencarian yang lama saya menemukan komentar yang telah diabaikan oleh semua pengguna yang menunjuk ke lib yang hilang. Sekarang, beberapa bulan kemudian, komentar tersebut telah diubah menjadi sebuah jawaban. Namun, ketika saya menjawab pertanyaan ini oleh diri saya sendiri, saya bermaksud membantu orang lain dengan memberikan solusi secara langsung. Ini tidak boleh dilupakan dan sejauh ini jawaban saya membantu banyak orang. Oleh karena itu pertanyaan saya jelas bukan duplikat. Ngomong-ngomong: Jawaban yang diterima dalam tautan yang disediakan di atas tidak menyelesaikan masalah !


Ya, saya menggunakan pencarian:

Gagal memuat plugin platform "windows". Platform yang tersedia adalah: Error

Menyebarkan aplikasi Qt C ++ dari Visual Studio qwindows.dll galat

gagal memuat plugin platform "windows" Platform yang tersedia adalah: windows, minimal

Namun, dalam kasus saya masalahnya masih berlanjut. Saya menggunakan Qt 5.1.1 dengan Visual Studio 2012 dan mengembangkan Aplikasi saya di Windows 7 dengan Qt Creator 2.8.1. Aplikasi dikompilasi dalam mode "Rilis" dan dapat dijalankan jika langsung dimulai dengan Qt Creator.

Namun, ketika memulai dari "rilis" -Folder, saya mendapatkan pesan berikut:

Aplikasi ini gagal dijalankan karena tidak dapat menemukan atau memuat plugin platform Qt "windows". Plugin platform yang tersedia adalah: minimal, di luar layar, windows.

Struktur folder terlihat seperti ini:

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

Platforms adalah folder yang langsung disalin dari Qt \ Qt5.1.1 \ 5.1.1 \ msvc2012 \ plugins \ platforms termasuk misalnya qwindows.dll. Tidak masalah jika saya mengganti namanya menjadi "platform" seperti yang dilakukan beberapa pengguna lain. Qt masih belum menemukan "platform plugin windows", dimana kesalahan saya?

Anonim
sumber
5
Saya punya masalah serupa. Windows 8.1 Qt 5.3.1 MinGW 32, tautan dinamis. Dipecahkan dengan menyalin DLL dari folder Qt ke ../MyApp/platforms/qwindows.dll. Catatan: tidak ada direktori "plugin" di jalur
Dmitriy
2
Kemungkinan duplikat hasil Qt5 Static Build Gagal memuat plugin platform "windows"
Jim G.
Atau masalah serupa, silakan gunakan alat ini Depends, yang akan menunjukkan ketergantungan DLL dan masalah yang diakibatkannya. Anda dapat menggunakan alat ini untuk analisis statis dari file exe atau dll, tetapi juga menggunakannya untuk menunjukkan startup aplikasi dengan DLL yang dimuat secara dinamis.
Flovdis
Gunakan windeployQt
CrippledTable

Jawaban:

64

Oke, seperti yang diposting di sini https://stackoverflow.com/a/17271172/1458552 tanpa banyak perhatian oleh pengguna lain:

The libEGL.dll hilang! Meskipun ini belum dilaporkan saat mencoba memulai aplikasi (semua * .dll lain seperti Qt5Gui.dll telah dilaporkan).

Anonim
sumber
2
Dalam kasus saya: Qt \ Qt5.1.1 \ 5.1.1 \ msvc2012 \ bin (tentu saja tergantung pada versi Visual Studio Anda)
Anonim
8
bagaimana Anda tahu bahwa dll yang hilang adalah libEGL?
pengguna1493046
4
ANDA MENGHEMAT SAYA JAM! Punya masalah yang sama pada Qt 5.3.1
tarabyte
4
@ user1493046 Saya berhasil mereproduksi ini menggunakan tergantung dan mode profilnya (F7). Setelah aplikasi dimulai dan menampilkan kesalahan, libEGL.dll muncul di daftar dependensi.
lapis
17
Menambahkan libEGL.dll tidak berhasil. Namun, menyetel variabel lingkungan berikut berhasil untuk saya: QT_QPA_PLATFORM_PLUGIN_PATH =% QTDIR% \ plugins \ platforms \
arsalank2
36

Saya membuat direktori platform di sebelah lokasi exe saya dan meletakkan qwindows.dll di dalamnya, tetapi saya masih menerima pesan "Gagal memuat plugin platform". Platform yang tersedia adalah: jendela "kesalahan.

Saya telah menyalin qwindows.dll dari C: \ Qt \ Qt5.1.1 \ Tools \ QtCreator \ bin \ plugins \ platforms, yang bukan lokasi yang tepat. Saya melihat log debug saat berjalan di Qt Creator dan menemukan bahwa aplikasi saya sedang mencari di C: \ Qt \ Qt5.1.1 \ 5.1.1 \ mingw48_32 \ plugins \ platform saat berjalan di debugger.

Ketika saya menyalin dari C: \ Qt \ Qt5.1.1 \ 5.1.1 \ mingw48_32 \ plugins \ platforms, semuanya bekerja dengan baik.

Brandon
sumber
38
Menyetel variabel lingkungan berikut berhasil untuk saya: QT_QPA_PLATFORM_PLUGIN_PATH =% QTDIR% \ plugins \ platforms \
arsalank2
24

Rilis mungkin tidak memiliki pustaka / plugin atau pustaka berada di direktori yang salah dan atau dari direktori yang salah.

Jawaban yang dimaksudkan Qt: Gunakan windeployqt . lihat paragraf terakhir untuk penjelasan

Jawaban manual:

Buat folder bernama "platform" di direktori yang sama dengan file application.exe Anda. Salin dan tempel qwindows.dll, yang ada di / bin kompiler mana pun yang Anda gunakan untuk merilis aplikasi, ke folder "platform". Seperti sihir, itu berhasil. Jika .dll tidak ada, periksa plugin / platforms / (dengan plugin / berada di direktori yang sama dengan bin /) <- komentar PfunnyGuy.

Sepertinya masalah yang umum terjadi adalah .dll diambil dari kompiler bin yang salah. Pastikan untuk menyalin qwindows.dll Anda dari kompiler yang sama seperti yang digunakan untuk merilis aplikasi Anda.

Qt hadir dengan aplikasi konsol platform yang akan menambahkan semua dependensi (termasuk yang seperti qwindows.dll dan libEGL.dll) ke dalam folder executable yang Anda terapkan. Ini adalah cara yang dimaksudkan untuk menerapkan aplikasi Anda, sehingga Anda tidak melewatkan perpustakaan apa pun (yang merupakan masalah utama dengan semua jawaban ini). Aplikasi untuk windows disebut windeployqt . Kemungkinan ada aplikasi konsol penerapan untuk setiap OS.

CrippledTable
sumber
1
Inilah yang saya butuhkan: Catatan, qwindows.dll tidak ada di bin / dari pemasangan platform Qt Anda, tetapi di plugin / platform /, dengan plugin / berada di direktori yang sama dengan bin /
PfunnyGuy
1
Terima kasih! Singkatnya, file-file tersebut adalah: Qt5Core.dll, Qt5Gui.dll, Qt5Widgets.dll dan YourApp.exe di direktori utama, dan platforms \ qwindows.dll dan platforms \ libEGL.dll di sub-direktori.
Pierre
1
windeployqt adalah jawaban yang benar. Saya menggunakannya dan menyalin semua yang dibutuhkan di sebelah .exe. Ini menghilangkan dugaan mengetahui dll mana yang diperlukan dan mana yang tidak
H. Al-Amri
14

Menyetel QT_QPA_PLATFORM_PLUGIN_PATHvariabel lingkungan ke% QTDIR% \ plugins \ platforms \ berhasil untuk saya .

Itu juga disebutkan di sini dan di sini .

Jim G.
sumber
3
Meskipun jawaban ini mungkin membuatnya berfungsi di mesin Anda saat ini, itu tidak membantu orang lain yang mencoba menerapkan program mereka ke mesin lain dan perlu secara khusus mengidentifikasi pustaka mana yang hilang / diperlukan.
RTbecard
1
pada 2017, ini berhasil untuk saya. Saya tidak akan menerapkan aplikasi apa pun!. Dengan pembuat Qt cukup Buka \ File atau proyek baru ... \ Aplikasi Qt Widget, lalu Jalankan dan macet dengan pesan yang sama. Mengatur var ini membantu saya.
Phiber
Cukup salin folder plugin di suatu tempat di samping "distro" Anda yang diimprovisasi dan arahkan env var ke sana - seharusnya berfungsi (tidak perlu menggunakan "QTDIR") :)
mlvljr
9

Saya mengalami ini dan tidak ada jawaban yang dapat saya temukan memperbaikinya untuk saya.

Kolega saya menginstal Qt (5.6.0) pada mesinnya di: C: \ Qt \ Qt5.6.0 \ 5.6 \ msvc2015 \ plugins
Saya memiliki Qt (5.6.2) yang diinstal di lokasi yang sama.

Saya belajar dari posting ini: http://www.tripleboot.org/?p=536 , bahwa Qt5Core.dll memiliki lokasi ke plugin yang ditulis ketika Qt pertama kali diinstal. Karena kolega dan direktori Qt saya sama, tetapi versi Qt yang berbeda diinstal, file qwindows.dll yang berbeda diperlukan. Ketika saya menjalankan exe yang digunakan olehnya, itu akan menggunakan file C: \ Qt \ Qt5.6.0 \ 5.6 \ msvc2015 \ plugins \ platforms \ qwindows.dll saya alih-alih yang terletak di sebelah file yang dapat dieksekusi di subfolder. \ Platforms.

Untuk menyiasati ini, saya menambahkan baris kode berikut ke aplikasi yang tampaknya memaksanya untuk melihat di sebelah exe untuk subfolder 'platform' sebelum melihat jalur di Qt5Core.dll.

QCoreApplication::addLibraryPath(".");

Saya menambahkan baris di atas ke metode utama sebelum panggilan QApplication seperti ini:

int main( int argc, char *argv[] )
{
    QCoreApplication::addLibraryPath(".");
    QApplication app( argc, argv );
    ...
    return app.exec();
}
Joel
sumber
1
Yang ini berhasil untuk saya ... tetapi perhatikan bahwa Anda mungkin perlu qwindowsd.dlldi direktori `platforms` jika Anda kebetulan berada dalam situasi seperti Anda berbagi build debug dengan kolega Anda ...
HostileFork mengatakan jangan percaya SE
Yang ini bekerja untuk saya karena menyebutkan qwindowsd.dll, saya sadar bahwa aplikasi saya dikompilasi dalam mode debug, dan saya menginstal pustaka Qtxxxd.dll tetapi menggunakan qwindows.dll di folder platform.
Gustavo Rodríguez
6

buat dir platforms dan salin qwindows.dllke sana, platformsdan app.exeberada di direktori yang sama

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

Struktur folder + app.exe + platforms\qwindows.dll

KunMing Xie
sumber
Disebutkan dalam pertanyaan bahwa "Platform adalah folder yang langsung disalin dari Qt \ Qt5.1.1 \ 5.1.1 \ msvc2012 \ plugins \ platforms termasuk misalnya qwindows.dll."
parasietje
Aplikasi @parasietje sedang mencari qwindows.dlldi direktori platforms. Saya memposting ini karena saya telah memperbaikinya. Apakah Anda melakukan tes sebelum memberi suara negatif?
KunMing Xie
Jawaban Anda tidak menjawab pertanyaan awal. Jawaban Anda menunjukkan sesuatu yang telah dicoba oleh pengepos asli.
parasietje
3

Saya menemukan solusi lain. Buat qt.conf di folder app seperti:

[Paths]
Prefix = .

Dan kemudian salin folder plugin ke dalam folder aplikasi dan itu berfungsi untuk saya.

Peter Quiring
sumber
Oke, saya berada di lingkungan minGW, CMake, Qt 5.12, di mana aplikasi alat penggulung angin tidak memungkinkan. Folder platform ada di sana, tetapi tidak berfungsi. Menggantinya dengan yang dari Qt-lib juga tidak membantu. Diperbaiki dengan menggunakan trik Anda (setelah menyalin folder). Terima kasih!
Marcel Petrick
2

Sebagian besar jawaban ini berisi info yang baik (benar), tetapi dalam kasus saya, masih ada yang kurang.

Aplikasi saya dibuat sebagai perpustakaan (dll) dan dipanggil oleh aplikasi non-Qt. Saya biasa windeployqt.exemengatur dll Qt, platform, plugin, dll. Di direktori instal, tetapi masih tidak dapat menemukan platformnya. Setelah beberapa percobaan, saya menyadari direktori kerja aplikasi diatur ke folder yang berbeda. Jadi, saya mengambil direktori di mana dll "hidup" menggunakan GetModuleHandleExAdan menambahkan direktori itu ke jalur perpustakaan Qt saat runtime menggunakan

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

Ini berhasil untuk saya.

Jacob Robbins
sumber
2

Bagi saya solusinya adalah mengoreksi PATHvariabel. Itu memiliki Anaconda3 \ Library \ bin sebagai salah satu jalur pertama. Direktori ini berisi beberapa pustaka Qt, tetapi tidak semua. Ternyata, itu masalahnya. Memindahkan C: \ Programs \ Qt \ 5.12.3 \ msvc2017_64 \ bin ke depan PATHmemecahkan masalah bagi saya.

Jann Poppinga
sumber
1

Saya mengalami masalah ini saat menggunakan QT 5.6, Anaconda 4.3.23, python 3.5.2 dan pyinstaller 3.3. Saya telah membuat program python dengan antarmuka yang dikembangkan menggunakan QTcreator, tetapi harus menyebarkannya ke komputer lain, oleh karena itu saya perlu membuat yang dapat dieksekusi, menggunakan pyinstaller.

Saya telah menemukan bahwa masalah telah diselesaikan di komputer saya jika saya menetapkan variabel lingkungan berikut:

QT_QPA_PLATFORM_PLUGIN_PATH:% QTDIR% \ plugins \ platforms \

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

Tetapi solusi ini hanya berfungsi pada PC saya yang memiliki conda dan qt diinstal di folder tersebut.

Untuk mengatasi ini dan membuat pekerjaan yang dapat dieksekusi di komputer mana pun, saya harus mengedit ".spec" (file pertama kali dibuat oleh pyinstaller) untuk menyertakan baris berikut:

data = [('C: \ Miniconda3 \ pkgs \ qt-5.6.2-vc14_3 \ Library \ plugins \ platforms * .dll', 'platforms'),]

Solusi ini didasarkan pada jawaban Jim G. dan CrippledTable

Loebsen Van de Graaff
sumber
1

Saya memiliki masalah yang sama dan menyelesaikannya dengan menerapkan beberapa hal. Yang pertama, jika itu adalah program yang Anda lakukan dengan Qt.

Di folder (dalam kasus saya) "C: \ Qt \ Qt5.10.0 \ 5.10.0 \ msvc2017_64 \ plugins" Anda menemukan folder lain, salah satunya adalah "platform". Folder "platform" itu akan disalin di sebelah file .exe Anda. Sekarang, jika Anda mendapatkan kesalahan 0xc000007d adalah Anda tidak menyalin versi yang dulu, karena bisa 32bits atau 64.

Jika Anda melanjutkan kesalahan adalah Anda kekurangan lebih banyak perpustakaan. Dengan program "Dependency Walker" Anda dapat mendeteksi beberapa folder yang hilang. Tentunya ini akan menunjukkan kepada Anda bahwa Anda memerlukan NVIDIA .dll, dan ini memberi tahu Anda lokasinya.

Cara lain, daripada menggunakan "Dependency Walker" adalah dengan menyalin semua .dll dari folder "C: \ Windows \ System32" di samping file yang dapat dieksekusi. Jalankan .exe Anda dan jika semuanya dimuat dengan baik, sehingga Anda tidak memiliki ruang yang ditempati di pustaka dll yang tidak Anda perlukan atau gunakan, gunakan program .exe dengan semua opsi Anda dan tanpa menutup .exe yang Anda lakukan adalah menghapus semua file. dll yang baru saja Anda salin di sebelah .exe, jadi jika .dll tersebut digunakan oleh program Anda, sistem tidak akan membiarkan Anda menghapusnya, hanya menghapus yang tidak diperlukan.

Saya harap solusi ini membantu Anda.

Ingatlah bahwa jika sistem operasi Anda 64 bit, pustaka akan berada di folder System32, dan jika sistem operasi Anda 32 bit, mereka juga akan berada di folder System32. Ini terjadi agar tidak ada masalah kompatibilitas dengan program yang 32 bit di komputer 64-bit. Folder SysWOW64 berisi file 32-bit sebagai cadangan.

Kemarahan
sumber
Ini berfungsi, tetapi lebih seperti solusi sementara. Apakah mungkin untuk melakukan sesuatu sehingga Anda tidak perlu menyalin folder platform?
Oleg Yablokov
0

Untuk platform MinGW dan jika Anda mengompilasi target Debug dengan CMakeLists.txt buatan tangan yang ditulis secara ad hoc, Anda juga perlu menambahkan qwindows.dll ke direktori platform. Windeployqt yang dapat dieksekusi bekerja dengan baik tetapi tampaknya untuk beberapa alasan aneh build CMake membutuhkan varian rilis juga. Singkatnya, akan lebih baik untuk memiliki qwindows.dll dan qwindowsd.dll di direktori platform Anda. Saya tidak melihat hasil aneh yang sama saat mengimpor proyek CMake di QtCreator dan kemudian menjalankan prosedur build. Mengompilasi pada baris perintah, proyek CMake tampaknya memicu ketergantungan qwindows.dll baik jika target Debug yang benar telah ditetapkan (qwindowsd.dll)

Michal Turlik
sumber
0

Gunakan file batch ini: 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
  • untuk menggunakannya, seret file gui.exe Anda dan letakkan di RunWithQt.bat di explorer,
  • atau hubungi RunWithQt gui.exedari baris perintah
Jakub Krzesłowski
sumber
0

Jika Anda telah menginstal Anaconda, saya sarankan Anda untuk menghapusnya dan mencoba menginstal paket python dari sumber, saya memperbaiki masalah ini dengan cara ini

Pengodean Soberbia
sumber
0

Aplikasi qtbase / bin / windeployqt.exe menyebarkan aplikasi Anda secara otomatis. Jika Anda memulai prompt dengan envirenmentvariables yang disetel dengan benar, perintah tersebut akan diterapkan ke direktori saat ini. Anda menemukan contoh skrip:

@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
MyGeertRo
sumber
0

Katakanlah, Anda ingin memiliki portabel CGAL-Demo . Jadi Anda akan memiliki folder "CGAL", dan di dalamnya, 1 subfolder bernama "lib": semua (umum) support-dll untuk program apa pun di folder CGAL, buka di sini. Dalam contoh kami, ini akan menjadi Dll-Download : cukup unzip ke direktori "lib". Semakin jauh Anda menggulir ke bawah pada halaman demo , semakin mengesankan kontennya. Dalam kasus saya, demo-polihedron sepertinya benar. Jika ini berjalan di notebook 10+ tahun saya, saya terkesan. Jadi saya membuat folder "demo" di direktori "CGAL", di samping "lib". Sekarang buat file .cmd di folder itu. Saya menamai milik saya "Polyhedron.cmd". Jadi kami memiliki struktur direktori seperti ini:

 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.

Dalam contoh kecil ini, "Polyhedron.cmd" berisi teks berikut:

@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"

Semua skrip bisa sama selain baris terakhir, tentunya. Satu-satunya peringatan adalah: "DOS-Window" tetap terbuka selama Anda menggunakan program yang sebenarnya. Tutup jendela shell, dan Anda juga mematikan * .exe. Kapan pun Anda menyalin folder "CGAL", karena "% ~ dp0" -wriggle yang aneh mewakili jalur lengkap ke file * .cmd yang kita mulai, dengan tanda "\". Jadi "% me% lib" selalu merupakan jalur lengkap ke perpustakaan sebenarnya ("CGAL \ lib" dalam kasus saya). 2 baris berikutnya memberitahu Qt dimana file "runtime" nya berada. Ini akan menjadi setidaknya file "qwindows.dll" untuk program Windows-Qt ditambah sejumlah * .dlls. Jika saya ingat benar, Dll-library (setidaknya saat saya mendownloadnya) memiliki sedikit "bug" karena berisi "platforms" -directory dengan qwindows.dll di dalamnya.pindah ke "plugin". Jika aplikasi Qt, aplikasi Qt apa pun , tidak menemukan "qwindows.dll", ia tidak dapat menemukan "windows". Dan ia mengharapkannya di direktori bernama "platform" di direktori "plugin", yang harus diberitahukan oleh OS tempat menjalankannya ... dan jika "QT_PLUGIN_PATH" tidak benar-benar mengarah ke semua helper-dll Anda perlu, beberapa program Qt masih akan berjalan tanpa masalah. Dan beberapa mengeluh tentang kehilangan * .dll yang belum pernah Anda dengar ...

Thomas Sturm
sumber
0

Bagi siapa pun yang datang dari QT versi 5.14.0, saya butuh 2 hari untuk menemukan pernyataan bug ini:

windeployqt tidak bekerja untuk MinGW QTBUG-80763 Akan diperbaiki di 5.14.1

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

Jadi waspadalah. Menggunakan windeployqt withMinGW akan memberikan kesalahan yang sama yang disebutkan di sini.

Yahya Tawil
sumber