Qt 5.1.1: Ứng dụng không khởi động được vì plugin nền tảng Windows windows thiếu


124

Chỉnh sửa: Một số người bắt đầu đánh dấu câu hỏi của tôi là trùng lặp. Đừng quên rằng có nhiều câu hỏi tương tự tồn tại khi tôi hỏi câu hỏi này (xem ví dụ danh sách bên dưới). Tuy nhiên, không có câu trả lời nào trong số này giải quyết vấn đề của tôi . Sau một hồi tìm kiếm, tôi thấy một bình luận đã bị bỏ qua bởi tất cả người dùng chỉ vào lib bị thiếu. Bây giờ, nhiều tháng sau, bình luận đã được thay đổi thành một câu trả lời. Tuy nhiên, khi tôi trả lời câu hỏi này bằng msyself, tôi dự định giúp đỡ người khác bằng cách trực tiếp cung cấp giải pháp. Điều này không nên quên và cho đến nay câu trả lời của tôi đã giúp rất nhiều người. Do đó, câu hỏi của tôi chắc chắn không phải là một bản sao. Nhân tiện: Câu trả lời được chấp nhận trong liên kết được cung cấp ở trên không giải quyết được vấn đề !


Có, tôi đã sử dụng tìm kiếm:

Không thể tải plugin nền tảng "windows". Các nền tảng có sẵn là: Lỗi

Triển khai ứng dụng Qt C ++ từ lỗi Visual Studio qwindows.dll

không thể tải plugin nền tảng "windows" Các nền tảng có sẵn là: windows, tối thiểu

Tuy nhiên, trong trường hợp của tôi, vấn đề vẫn còn tồn tại. Tôi đang sử dụng Qt 5.1.1 với Visual Studio 2012 và đã phát triển Ứng dụng của mình trên Windows 7 với Qt Creator 2.8.1. Ứng dụng được biên dịch trong chế độ "Phát hành" và có thể được thực thi nếu được khởi động trực tiếp với Qt Creator.

Tuy nhiên, khi bắt đầu từ "phát hành" -Folder, tôi nhận được thông báo sau:

Ứng dụng này không khởi động được vì không thể tìm hoặc tải plugin "windows" của nền tảng Qt. Các plugin nền tảng có sẵn là: tối thiểu, ngoài màn hình, cửa sổ.

Cấu trúc thư mục trông như thế này:

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

Nền tảng là thư mục được sao chép trực tiếp từ các nền tảng Qt \ Qt5.1.1 \ 5.1.1 \ msvc2012 \ plugins \, bao gồm cả qwindows.dll. Không quan trọng nếu tôi đổi tên nó thành "nền tảng" như một số người dùng khác đã làm. Qt vẫn không tìm thấy "cửa sổ plugin nền tảng", lỗi của tôi ở đâu?


5
Tôi đã có vấn đề tương tự. Windows 8.1 Qt 5.3.1 MinGW 32, liên kết động. Được giải quyết bằng cách sao chép DLL từ thư mục của Qt sang ../MyApp/pl platforms / qwindows.dll. Lưu ý: không có thư mục "bổ trợ" nào trên đường dẫn
Dmitriy


Các vấn đề tương tự, vui lòng sử dụng công cụ này Depends, nó sẽ hiển thị cho bạn các phụ thuộc DLL và các vấn đề phát sinh từ chúng. Bạn có thể sử dụng công cụ này để phân tích tĩnh tệp exe hoặc dll, nhưng cũng có thể sử dụng nó để hiển thị khởi động ứng dụng với các tệp DLL được tải động.
Flovdis

Sử dụng windeployQt
CrippledTable

Câu trả lời:


64

Được rồi, như được đăng ở đây https://stackoverflow.com/a/17271172/1458552 mà không có nhiều sự chú ý của người dùng khác:

Các libEGL.dll đã mất tích! Mặc dù điều này đã không được báo cáo khi cố gắng khởi động ứng dụng (tất cả các * * khác như Qt5Gui.dll đã được báo cáo).


2
Trong trường hợp của tôi: Qt \ Qt5.1.1 \ 5.1.1 \ msvc2012 \ bin (tất nhiên tùy thuộc vào phiên bản Visual Studio của bạn)
Ẩn danh

8
Làm thế nào bạn biết rằng dll bị mất là libEGL?
dùng1493046

4
BẠN ĐÃ TIẾT KIỆM CHO TÔI GIỜ! Có vấn đề tương tự trên Qt 5.3.1
tarabyte

4
@ user1493046 Tôi đã quản lý để tái tạo điều này bằng cách sử dụng phụ thuộc và chế độ định hình của nó (F7). Sau khi ứng dụng đã khởi động và hiển thị lỗi, libEGL.dll xuất hiện trong danh sách phụ thuộc.
lapis

17
Thêm libEGL.dll không hoạt động. Tuy nhiên, việc đặt biến môi trường sau đây có hiệu quả với tôi: QT_QPA_PLATFORM_PLUGIN_PATH =% QTDIR% \ plugins \ platform \
arsalank2

36

Tôi đã tạo một thư mục nền tảng bên cạnh vị trí exe của mình và đặt qwindows.dll bên trong, nhưng tôi vẫn nhận được lỗi "Không thể tải plugin" nền tảng ". Các nền tảng có sẵn là: windows".

Tôi đã sao chép qwindows.dll từ C: \ Qt \ Qt5.1.1 \ Tools \ QtCreator \ bin \ plugins \ platform, không đúng vị trí. Tôi đã xem nhật ký gỡ lỗi khi chạy trong Qt Creator và thấy rằng ứng dụng của tôi đang tìm kiếm trong các nền tảng C: \ Qt \ Qt5.1.1 \ 5.1.1 \ mingw48_32 \ plugins \ khi nó chạy trong trình gỡ lỗi.

Khi tôi sao chép từ C: \ Qt \ Qt5.1.1 \ 5.1.1 \ mingw48_32 \ plugins \ platform, mọi thứ đều hoạt động tốt.


38
Đặt biến môi trường sau đây có hiệu quả với tôi: QT_QPA_PLATFORM_PLUGIN_PATH =% QTDIR% \ plugins \ platform \
arsalank2

24

Bản phát hành có khả năng thiếu một thư viện / plugin hoặc thư viện nằm trong thư mục sai và hoặc từ thư mục sai.

Qt dự định trả lời: Sử dụng Windeployqt . xem đoạn cuối để giải thích

Hướng dẫn trả lời:

Tạo một thư mục có tên "platform" trong cùng thư mục với tệp application.exe của bạn. Sao chép và dán qwindows.dll, được tìm thấy trong / bin của bất kỳ trình biên dịch nào bạn đã sử dụng để phát hành ứng dụng của mình, vào thư mục "nền tảng". Giống như phép thuật, nó hoạt động. Nếu không có thì hãy kiểm tra các plugin / nền tảng / (với các plugin / nằm trong cùng thư mục với bin /) <- Nhận xét của PfunnyGuy.

Có vẻ như một vấn đề phổ biến là các lỗi được lấy từ bin trình biên dịch sai. Hãy chắc chắn sao chép qwindows.dll của bạn từ cùng trình biên dịch với trình biên dịch được sử dụng để phát hành ứng dụng của bạn.

Qt đi kèm với các ứng dụng bảng điều khiển nền tảng sẽ thêm tất cả các phụ thuộc (bao gồm cả các ứng dụng như qwindows.dll và libEGL.dll) vào thư mục của tệp thực thi được triển khai của bạn. Đây là cách dự định để triển khai ứng dụng của bạn, vì vậy bạn không bỏ lỡ bất kỳ thư viện nào (đây là vấn đề chính với tất cả các câu trả lời này). Ứng dụng cho windows được gọi là Windeployqt . Có khả năng là một ứng dụng bảng điều khiển triển khai cho mỗi HĐH.


1
Đây là những gì tôi cần: Lưu ý, qwindows.dll không có trong bin / cài đặt nền tảng Qt của bạn, mà là trong các plugin / nền tảng /, với các plugin / nằm trong cùng thư mục với bin /
PfunnyGuy 22/2/18

1
Cảm ơn bạn! Tóm lại, các tệp là: Qt5Core.dll, Qt5Gui.dll, Qt5Widgets.dll và YourApp.exe trong thư mục chính và platform \ qwindows.dll và platform \ libEGL.dll trong thư mục con.
Pierre

1
Windeployqt là câu trả lời đúng. Tôi đã sử dụng nó và nó sao chép mọi thứ cần thiết bên cạnh .exe. Nó loại bỏ phỏng đoán về việc biết dll nào là cần thiết và cái nào không
H. Al-Amri

14

Đặt QT_QPA_PLATFORM_PLUGIN_PATHbiến môi trường thành% QTDIR% \ plugins \ platform \ làm việc cho tôi .

Nó cũng đã được đề cập ở đâyở đây .


3
Mặc dù câu trả lời này có thể khiến nó hoạt động trên máy hiện tại của bạn, nhưng nó không giúp những người khác đang cố gắng triển khai các chương trình của họ sang các máy khác và cần xác định cụ thể thư viện nào bị thiếu / yêu cầu.
RTbecard

1
vào năm 2017, điều này làm việc cho tôi. Tôi sẽ không triển khai bất kỳ ứng dụng nào! Với trình tạo Qt, chỉ cần mở \ Tập tin hoặc dự án mới ... \ Ứng dụng Widgets của Qt, sau đó Chạy và nó gặp sự cố với cùng một thông báo. Đặt var này giúp tôi.
Phiber

Chỉ cần sao chép thư mục plugin ở đâu đó cùng với "distro" ngẫu hứng của bạn và trỏ var env vào nó - nên hoạt động (không cần sử dụng "QTDIR") :)
mlvljr

9

Tôi gặp phải vấn đề này và không có câu trả lời nào tôi có thể tìm thấy đã sửa nó cho tôi.

Colleauge của tôi đã cài đặt Qt (5.6.0) trên máy của anh ấy tại: C: \ Qt \ Qt5.6.0 \ 5.6 \ msvc2015 \ plugin
tôi đã cài đặt Qt (5.6.2) ở cùng một vị trí.

Tôi đã học được từ bài đăng này: http://www.tripleboot.org/?p=536 , rằng Qt5Core.dll có một vị trí cho các plugin được ghi vào nó khi Qt được cài đặt lần đầu tiên. Vì các thư mục Qt của đồng nghiệp và Qt của tôi giống nhau, nhưng phiên bản Qt khác nhau đã được cài đặt, nên cần một tệp qwindows.dll khác. Khi tôi chạy exe do anh ấy triển khai, nó sẽ sử dụng tệp C: \ Qt \ Qt5.6.0 \ 5.6 \ msvc2015 \ plugins \ platform \ qwindows.dll thay vì tệp nằm bên cạnh tệp thực thi trong thư mục con. \ Platform.

Để giải quyết vấn đề này, tôi đã thêm dòng mã sau vào ứng dụng dường như buộc nó phải tìm bên cạnh exe cho thư mục con 'nền tảng' trước khi nó nhìn vào đường dẫn trong Qt5Core.dll.

QCoreApplication::addLibraryPath(".");

Tôi đã thêm dòng trên vào phương thức chính trước lệnh gọi QApplication như thế này:

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

1
Cái này hoạt động với tôi ... nhưng lưu ý rằng bạn có thể cần qwindowsd.dlltrong thư mục `platform` nếu bạn gặp phải tình huống bạn đang chia sẻ các bản dựng gỡ lỗi với các đồng nghiệp của mình ...
HostileFork nói không tin tưởng vào

Cái này hoạt động với tôi vì đề cập đến qwindowsd.dll, tôi biết rằng ứng dụng của tôi đã được biên dịch ở chế độ gỡ lỗi và tôi đã cài đặt các thư viện Qtxxxd.dll nhưng đang sử dụng qwindows.dll trong thư mục nền tảng.
Gustavo Rodríguez

6

tạo thư mục platforms và sao chép qwindows.dllvào nó, platformsapp.exetrong cùng một thư mục

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

Cấu trúc thư mục + app.exe + platforms\qwindows.dll


Nó được đề cập trong câu hỏi rằng "Nền tảng là thư mục được sao chép trực tiếp từ Qt \ Qt5.1.1 \ 5.1.1 \ msvc2012 \ plugins \ platform, bao gồm cả qwindows.dll."
parasietje 16/03/18

Ứng dụng @parasietje đang tìm kiếm qwindows.dlltrong thư mục platforms. Tôi đăng bài này vì tôi đã sửa nó. Bạn đang làm một bài kiểm tra trước khi downvote?
KunMing Xie

Câu trả lời của bạn không trả lời câu hỏi ban đầu. Câu trả lời của bạn cho thấy một cái gì đó mà các poster ban đầu đã thử.
parasietje

3

Tôi tìm thấy một giải pháp khác. Tạo qt.conf trong thư mục ứng dụng như vậy:

[Paths]
Prefix = .

Và sau đó sao chép thư mục plugin vào thư mục ứng dụng và nó hoạt động với tôi.


Ok, tôi đang ở trong môi trường minGW, CMake, Qt 5.12, trong đó không thể áp dụng công cụ Windeploy-tool. Thư mục nền tảng đã ở đó, nhưng không hoạt động. Thay thế nó bằng một từ Qt-lib cũng không giúp được gì. Đã sửa bằng cách sử dụng thủ thuật của bạn (sau khi sao chép thư mục). Cảm ơn bạn!
Marcel Petrick

2

Hầu hết các câu trả lời này chứa thông tin tốt (chính xác), nhưng trong trường hợp của tôi, vẫn còn thiếu một cái gì đó.

Ứng dụng của tôi được xây dựng dưới dạng thư viện (dll) và được gọi bởi ứng dụng không phải Qt. Tôi đã từng windeployqt.exethiết lập các dll Qt, nền tảng, plugin, v.v. trong thư mục cài đặt, nhưng nó vẫn không thể tìm thấy nền tảng. Sau một số thử nghiệm, tôi nhận ra thư mục làm việc của ứng dụng được đặt thành một thư mục khác. Vì vậy, tôi đã lấy thư mục mà dll "sống" bằng cách sử dụng GetModuleHandleExAvà thêm thư mục đó vào đường dẫn thư viện Qt khi chạy bằng cách sử dụng

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

Điều này làm việc cho tôi.


2

Đối với tôi giải pháp là sửa PATHbiến. Nó có Anaconda3 \ Library \ bin là một trong những đường dẫn đầu tiên. Thư mục này chứa một số thư viện Qt, nhưng không phải tất cả. Rõ ràng, đó là một vấn đề. Di chuyển C: \ Programs \ Qt \ 5.12.3 \ msvc2017_64 \ bin ra phía trước để PATHgiải quyết vấn đề cho tôi.


1

Tôi gặp vấn đề này khi sử dụng QT 5.6, Anaconda 4.3.23, python 3.5.2 và pyinstaller 3.3. Tôi đã tạo ra một chương trình python với giao diện được phát triển bằng QTcreator, nhưng phải triển khai nó cho các máy tính khác, do đó tôi cần phải thực thi, sử dụng pyinstaller.

Tôi thấy rằng vấn đề đã được giải quyết trên máy tính của mình nếu tôi đặt các biến môi trường sau:

QT_QPA_PLATFORM_PLUGIN_PATH:% QTDIR% \ plugins \ platform \

QTDIR: C: \ Miniconda3 \ pkgs \ qt-5.6.2-vc14_3 \ Thư viện

Nhưng giải pháp này chỉ hoạt động trên PC của tôi đã cài đặt conda và qt trong các thư mục đó.

Để giải quyết vấn đề này và làm cho công việc thực thi trên bất kỳ máy tính nào, tôi đã phải chỉnh sửa ".spec" (tệp được tạo bởi pyinstaller lần đầu tiên) để bao gồm dòng sau:

data = [('C: \ Miniconda3 \ pkgs \ qt-5.6.2-vc14_3 \ Library \ plugins \ platform * đậm', 'platform'),]

Giải pháp này dựa trên câu trả lời của Jim G. và CripplingTable


1

Tôi đã có cùng một vấn đề và giải quyết nó bằng cách áp dụng một số điều. Đầu tiên, nếu đó là một chương trình mà bạn đã làm với Qt.

Trong thư mục (trong trường hợp của tôi) của "C: \ Qt \ Qt5.10.0 \ 5.10.0 \ msvc2017_64 \ plugin" bạn tìm thấy các thư mục khác, một trong số đó là "nền tảng". Thư mục "nền tảng" đó sẽ được sao chép bên cạnh tệp thực thi .exe của bạn. Bây giờ, nếu bạn gặp lỗi 0xc000007d là bạn đã không sao chép phiên bản đó, vì nó có thể là 32 bit hoặc 64.

Nếu bạn tiếp tục với các lỗi là bạn thiếu nhiều thư viện. Với chương trình "Dependency Walker", bạn có thể phát hiện một số thư mục bị thiếu. Chắc chắn nó sẽ cho bạn biết rằng bạn cần một NVIDIA. Nó sẽ cho bạn biết vị trí.

Một cách khác, thay vì sử dụng "Dependency Walker" là sao chép tất cả các tệp từ thư mục "C: \ Windows \ System32" bên cạnh tệp thực thi của bạn. Thực thi .exe của bạn và nếu mọi thứ tải tốt, do đó bạn không có dung lượng trong thư viện dll mà bạn không cần hoặc không sử dụng, hãy sử dụng chương trình .exe với tất cả các tùy chọn của bạn và không đóng .exe mà bạn làm là xóa tất cả. dll rằng bạn vừa sao chép bên cạnh .exe, vì vậy nếu những chương trình đó đang được chương trình của bạn sử dụng, hệ thống sẽ không cho phép bạn xóa, chỉ xóa những thứ không cần thiết.

Tôi hy vọng giải pháp này phục vụ bạn.

Hãy nhớ rằng nếu hệ điều hành của bạn là 64 bit, các thư viện sẽ nằm trong thư mục System32 và nếu hệ điều hành của bạn là 32 bit, chúng cũng sẽ nằm trong thư mục System32. Điều này xảy ra để không có vấn đề tương thích với các chương trình 32 bit trong máy tính 64 bit. Thư mục SysWOW64 chứa các tệp 32 bit làm bản sao lưu.


Nó hoạt động, nhưng giống như một giải pháp tạm thời. Có thể làm một cái gì đó để bạn không cần phải sao chép thư mục nền tảng?
Oleg Yablokov

0

Đối với nền tảng MinGW và nếu bạn đang biên dịch mục tiêu Gỡ lỗi bằng cách viết thủ công CMakeLists.txt, bạn cũng cần thêm qwindows.dll vào thư mục nền tảng. Bộ thực thi Windeployqt hoạt động tốt nhưng có vẻ như vì một số lý do kỳ lạ, bản dựng CMake cũng cần biến thể phát hành. Tóm lại, sẽ tốt hơn nếu có cả qwindows.dll và qwindowsd.dll trong thư mục nền tảng của bạn. Tôi không nhận thấy kết quả kỳ lạ tương tự khi nhập dự án CMake trong QtCreator và sau đó chạy quy trình xây dựng. Biên dịch trên dòng lệnh, dự án CMake dường như kích hoạt sự phụ thuộc của qwindows.dll nếu đúng với mục tiêu Debug được đặt đúng chỗ (qwindowsd.dll)


0

Sử dụng tệp bó này: 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
  • để sử dụng nó, hãy kéo tập tin gui.exe của bạn và thả nó vào RunWithQt.bat trong explorer,
  • hoặc gọi RunWithQt gui.exetừ dòng lệnh

0

Nếu bạn đã cài đặt Anaconda, tôi khuyên bạn nên gỡ cài đặt nó và thử cài đặt gói python từ nguồn, tôi đã khắc phục vấn đề này theo cách này


0

Ứng dụng qtbase / bin / Windeployqt.exe tự động triển khai ứng dụng của bạn. Nếu bạn bắt đầu một dấu nhắc với envirenmentvariabled được đặt chính xác, nó sẽ triển khai vào thư mục hiện tại. Bạn tìm thấy một ví dụ về kịch bản:

@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

Hãy nói rằng, bạn muốn có một số CGAL-Demos di động. Vì vậy, bạn có một thư mục "CGAL" và trong đó, 1 thư mục con có tên là "lib": tất cả (chung) hỗ trợ cho mọi chương trình trong thư mục CGAL tại đây. Trong ví dụ của chúng tôi, đây sẽ là DLL-Download : chỉ cần giải nén vào thư mục "lib". Bạn càng cuộn xuống trên trang demo , nội dung càng ấn tượng. Trong trường hợp của tôi, bản đa diện có vẻ đúng. Nếu điều này chạy trên máy tính xách tay 10+ yo của tôi, tôi rất ấn tượng. Vì vậy, tôi đã tạo một thư mục "bản demo" trong thư mục "CGAL", cùng với "lib". Bây giờ tạo một tập tin .cmd trong thư mục đó. Tôi đặt tên cho tôi là "Polyhedron.cmd". Vì vậy, chúng tôi có một cấu trúc thư mục như thế này:

 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.

Trong ví dụ nhỏ này, "Polyhedron.cmd" chứa văn bản sau:

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

Tất cả các kịch bản có thể giống nhau ngoài dòng cuối cùng, rõ ràng. Nhắc nhở duy nhất là: "Cửa sổ DOS" vẫn mở miễn là bạn sử dụng chương trình thực tế. Đóng cửa sổ shell và bạn cũng giết * .exe. Trong trường hợp bạn sao chép "CGAL" -folder, vì "% ~ dp0" lạ lùng biểu thị đường dẫn đầy đủ đến tệp * .cmd mà chúng tôi đã bắt đầu, với dấu "\". Vì vậy, "% me% lib" luôn là đường dẫn đầy đủ đến thư viện thực tế ("CGAL \ lib" trong trường hợp của tôi). 2 dòng tiếp theo cho Qt biết tập tin "runtime" của nó ở đâu. Đây ít nhất sẽ là tệp "qwindows.dll" cho các chương trình Windows-Qt cộng với bất kỳ số lượng *. Nếu tôi nhớ chính xác, thư viện DLL (ít nhất là khi tôi tải xuống) có một chút "lỗi" vì nó chứa "nền tảng" -directory với qwindows.dll trong đó.di chuyển vào "plugin". Nếu một ứng dụng Qt, bất kỳ ứng dụng Qt nào , không tìm thấy "qwindows.dll", thì nó không thể tìm thấy "cửa sổ". Và nó hy vọng nó trong một thư mục có tên là "platform" trong thư mục "plugin", nó phải được hệ điều hành cho biết nó đang chạy trên ... và nếu "QT_PLUGIN_PATH" không chính xác chỉ ra tất cả các trình trợ giúp cần, một số chương trình Qt vẫn sẽ chạy mà không có probs. Và một số phàn nàn về việc mất tích *. Bạn chưa bao giờ nghe thấy ...


0

Đối với bất kỳ ai đến từ phiên bản QT 5.14.0, tôi đã mất 2 ngày để tìm thấy bản sửa lỗi này:

Windeployqt không hoạt động cho MinGW QTBUG-80763 Sẽ được sửa trong 5.14.1

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

Vì vậy, hãy nhận thức. Sử dụng Windeployqt vớiMinGW sẽ đưa ra lỗi tương tự được nêu ở đây.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.