記錄一次Qt5程序無法運行的解決過程


上幾天在V站逛的時候看到某作者出了個截圖工具(snipaste)很是強大.

可下載后就是打不開, 工具是Qt5寫的, 提示我無法加載qwindows.dll, 這個dll明確在platforms目錄里放着的.

谷歌一通后發現Qt的社區有個帖子也是這樣, 那人用Dependency Walker列出了程序加載的dll, 而且其中一個dll路徑明顯是本機某個特殊路徑.

我在想是不是因為我安裝了Qt的SDK的原因.經過Dependency Walker查看, 果然是.

本來該加載應用程序目錄下的qwindows.dll, 結果加載到我的SDK里去了, 因為SDK是用VS2013編譯的, 而這個截圖工具是VS2015編譯的, 可能DLL之間不兼容所以才加載失敗.

為什么會加載到我的SDK里去呢, 因為我在系統的環境變量里設置了一個QT_PLUGIN_PATH這樣的變量, Qt在加載時就優先加載我這個環境變量指定的路徑了.

我把環境變量改名后工具就正常運行起來了.

下面截圖都是這個工具截的, 很強大.

 

 

那怎樣才能避免這種情況發生呢?

以下是猜測並沒有實際驗證, 請測試后再使用. 哪天有空測試了, 再來修改這篇文章.

查看Qt5的文檔(http://doc.qt.io/qt-5/qcoreapplication.html#addLibraryPath)發現有下面這個方法:

void QCoreApplication::addLibraryPath(const QString &path);

在程序的main方法里面一開始先調用一下這個方法, 將程序當前目錄或者程序當前目錄下的plugins目錄加進去應該就會優先讀取了.

之前Qt4的插件都是部署在plugins目錄里, 現在Qt5.7不知道怎么部署了, 看情況是直接部署在程序根目錄下, 不用非挪到plugins目錄里.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM