Linux部署QWebEngineView程序需要拖家帶口的東西


Qt的官方文檔 Deploying Qt WebEngine Applications 里籠統地寫了:

When manually deploying applications that depend on Qt WebEngine, all the files that are required to run the application have to be included: libraries, QML imports, plugins, and translations.
...
When manually deploying applications that depend on Qt WebEngine, the following files might have to be deployed:

  • Libraries
  • QML imports
  • Qt WebEngine process
  • Resources
  • Translations
  • Audio and video codecs

但問題是,到底哪些“libraries, QML imports, plugins, and translations.”和“Qt WebEngine process、Resources、Audio and video codecs”需要發布呢?以及發布到哪里呢?

lddQWebEngineView的依賴,並排除掉/lib64下的系統庫:

ldd libQt5WebEngineWidgets.so.5 | grep -v -E "\s/lib64" | cut -d \  -f 3 | sort -u

/opt/lib/./libdbus-1.so.3
/opt/lib/./libicudata.so.56
/opt/lib/./libicui18n.so.56
/opt/lib/./libicuuc.so.56
/opt/lib/./libQt5Core.so.5
/opt/lib/./libQt5Gui.so.5
/opt/lib/./libQt5Network.so.5
/opt/lib/./libQt5Positioning.so.5
/opt/lib/./libQt5PrintSupport.so.5
/opt/lib/./libQt5Qml.so.5
/opt/lib/./libQt5Quick.so.5
/opt/lib/./libQt5QuickWidgets.so.5
/opt/lib/./libQt5WebChannel.so.5
/opt/lib/./libQt5WebEngineCore.so.5
/opt/lib/./libQt5Widgets.so.5

這一大坨。其中需要libdbus-1.so.3是筆者用的Linux發行版(系統等價於CentOS 7.3,內核是3.10.0)上自帶的libdbus-1.so.3.7.4太舊,參考文獻1中給的解決方法是

需要下載dbus-1.13.10,編譯安裝后將庫文件復制到Qt的運行庫目錄下

不過筆者沒有按此文建議放在QtCreator/lib/Qt/lib下,而是放在$QTDIR/lib下。如果讀者的操作系統版本夠高,應該可以不需要這玩意。

QML imports

筆者是全C++開發,沒有用到QML,此項不明。另一方面可以說明如果不用QML的話,無需關心這部分的部署可以略過。

plugins(包括Audio and video codecs)

需要將$QTDIR/plugins/下面以下文件保持目錄結構地復制到執行文件同位置(比如執行文件在myDir/bin,則bearer目錄也放到myDir/bin,或者用API改庫搜索路徑,見下文)

  • bearer/libqnmbearer.so
  • bearer/libqconnmanbearer.so
  • bearer/libqgenericbearer.so
  • imageformats/libqico.so
  • imageformats/libqicns.so
  • imageformats/libqwbmp.so
  • imageformats/libqjpeg.so
  • imageformats/libqgif.so
  • imageformats/libqtga.so
  • imageformats/libqtiff.so
  • imageformats/libqwebp.so
  • platforms/libqxcb.so
  • platforminputcontexts/libcomposeplatforminputcontextplugin.so
  • platformthemes/libqgtk3.so
  • xcbglintegrations/libqxcb-glx-integration.so

此外為了讓Qt插件系統運行起來,以及QWebEngineVew需要的OpenGL運行起來,還需要$QTDIR/lib下的libQt5DBus.so.5,libQt5XcbQpa.so.5,libQt5EglFSDeviceIntegration.so.5這三個庫。

translations

$QTDIR/translations/qtwebengine*,包括一堆.qm和一個qtwebengine_locales目錄,復制到執行文件同位置。

Qt WebEngine process

$QTDIR/libexec/QtWebEngineProcess,復制到執行文件同位置。

Resources

$QTDIR/resources下的icudtl.dat和qtwebengine*.pak,復制到執行文件同位置。

執行文件查找上述文件的搜索目錄

Qt框架默認是去編譯時的Qt路徑里找這些東西的,如果失敗則會嘗試程序啟動路徑。如果希望不要出現查找問題,可以按官方文檔 Qt for Linux/X11 - Deployment 的建議,用QApplication::addLibraryPath()QApplication::setLibraryPaths()調整搜索路徑,此處不再贅述。

參考資料

  1. codeaftercode. 解決中標麒麟7安裝Qt5.12.1后無法啟動的問題[LIBDBUS_1_3 not defined][FT_Get_Font_Format] [EB/OL]. https://blog.csdn.net/codeaftercode/article/details/107584151


免責聲明!

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



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