1.問題現象
運行可執行方式比如 ./setup
有如下報錯:
This application failed to start because it could not find or load the Qt platform "xcb" in "".
Available platform plugins are: xcb.
Reinstalling the application may fix this problem.
已放棄(核心已轉儲)
2.定位錯誤
- 打開qt插件debug開關 export QT_DEBUG_PLUGINS=1
- 運行./setup
- 發現加載xcb插件時,加載libQt5XcbQpa.so.5出錯,且其定位到的libQt5XcbQpa.so.5庫目錄為/user/lib目錄下
- 此時懷疑通過加載xcb插件時,查找的libQt5XcbQpa.so.5目錄有問題
- 通過ldd查看setup目錄下的libqxcb.so,發現其加載目錄為/user/lib
- 與正常環境下的ldd libqxcb.so比較,發現正常環境下的libqxcb.so加載的libQt5XcbQpa.so.5在qt安裝目錄下(即~/Qt5.6/5.6/gcc_64/lib)
- 此時確認了問題所在,我是新安裝的qt環境,但沒有將qt庫目錄添加到環境變量LD_LIBRARY_PATH,引起的加載libQt5XcbQpa.so.5目錄尋找從最低優先級地方找(第3部分討論linux下so動態庫搜索順序)
- 修改:在~/.bashrc末尾添加 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/user/Qt5.6/5.6/gcc_64/lib