上幾天在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目錄里.
