标题:【Qt5 Ubuntu動態鏈結庫發佈配置問題】
作者:yishiang0217
日期:2017-07-12 10:24
内容:
各位板友大家好,
我想請問Qt5於Ubuntu下發布檔案(含動態庫)至另一台沒有裝Qt庫的問題,
為了測試,我用Qt Creator建立了一個空白的QMainWindow專案,
直接進行編譯,於Qt Creator執行能成功,而於command line執行無法成功,
於是我參照官方文檔,建立.sh檔後執行.sh檔即可成功於有安裝qt的Ubuntu執行。
http://doc.qt.io/qt-5/linux-deployment.html
(文檔中說明預設名platforms需於執行程序目錄的子目錄且包含libqxcb.so,
而.sh檔是直接拷貝官方內容,並置於執行程序同層級目錄。)
但將執行目錄中的檔案打包至另一台虛擬機的Ubuntu中,
(於打包前有用ldd查詢程序所需動態庫,並複製至執行目錄的子目錄lib下)
執行.sh檔卻出現了..
"it could not find or load the qt platform plugin xcb in"
類似的訊息,用ldd查詢執行檔,所有所需的動態庫皆可於執行目錄的子目錄找到,
(有於.pro檔設定rpath:QMAKE_LFLAGS += "-Wl,--rpath,\'\$$ORIGIN/lib\'"
不論設不設定都得到相同的錯誤訊息)
懇請板上先進給予詳細指引。
以下是我的執行程序目錄結構:
MyApp/
├── lib
│ ├── libicudata.so.56
│ ├── libicui18n.so.56
│ ├── libicuuc.so.56
│ ├── libQt5Core.so.5
│ ├── libQt5DBus.so.5
│ ├── libQt5Gui.so.5
│ └── libQt5XcbQpa.so.5
│ (以下省略..)
│
├── plugins(/Qt/ggc_64/plugins資料夾完整複製)
│ ├── platforms
│
├── platforms(/Qt/ggc_64/plugins/platforms/資料夾完整複製)
│ ├── libqxcb.so
│
│
├── MyApp(可執行文件)
│
├── MyApp.sh
若有板上先進知道如何解決問題,還請不吝賜教,謝謝^^
--
曾基於上面的後續嘗試加入qt.conf和MyApp可執行文件同級目錄,
內容為:
Prefix = ./
Libraries = lib
Plugins = plugins
也是不行,不曉得是不是沒有讀到。
#1 [笑颜 07-13 09:07]
你再试试,看看ldd libqxcb.so,我记得好像这个库还需要依赖其他库,因为我之前也是在这里折磨了很久!
#2 [笑颜 07-13 09:11]
比较高的版本还需要:(我是5.9.0)
libQt5XcbQpa.so.5
├── xcbglintegrations
│ ├── libqxcb-glx-integration.so
#3 回 笑颜 的帖子 [yishiang0217 07-13 10:40]
笑颜:你再试试,看看ldd libqxcb.so,我记得好像这个库还需要依赖其他库,因为我之前也是在这里折磨了很久! (2017-07-13 09:07)
笑顏大大您好,
首先謝謝您的回覆,於目標平台Ubuntu上進行試驗(沒qt.conf文件)還是失敗,以下將進行我的操作說明:
--
1. ldd Demo 提示無缺檔案
(以下節錄部份訊息...)
james@james-virtual-machine:~/下載/Demo9$ ldd Demo
linux-vdso.so.1 =>(0x00007ffd196d8000)
libVLCQtCore.so.1.1 => /home/james/下載/Demo9/./lib/libVLCQtCore.so.1.1 (0x00007f6616bc9000)
libVLCQtWidgets.so.1.1 => /home/james/下載/Demo9/./lib/libVLCQtWidgets.so.1.1 (0x00007f66169b1000)
libQt5Widgets.so.5 => /home/james/下載/Demo9/./lib/libQt5Widgets.so.5 (0x00007f6616180000)
libQt5Gui.so.5 => /home/james/下載/Demo9/./lib/libQt5Gui.so.5 (0x00007f66159d2000)
libQt5Core.so.5 => /home/james/下載/Demo9/./lib/libQt5Core.so.5 (0x00007f6615298000)
libstdc++.so.6 => /home/james/下載/Demo9/./lib/libstdc++.so.6 (0x00007f6614f15000)
libgcc_s.so.1 => /home/james/下載/Demo9/./lib/libgcc_s.so.1 (0x00007f6614cff000)
(下面省略...)
2. ldd ./platforms/libqxcb.so 有提示缺少檔案
(以下節錄部份訊息)
james@james-virtual-machine:~/下載/Demo9/platforms$ ldd libqxcb.so
./libqxcb.so: /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5: version `Qt_5_PRIVATE_API' not found (required by ./libqxcb.so)
linux-vdso.so.1 =>(0x00007ffcb4fca000)
libQt5XcbQpa.so.5 => /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5 (0x00007f5f8a6fd000)
libQt5DBus.so.5 => /usr/lib/x86 ..
#4 回 笑颜 的帖子 [yishiang0217 07-13 10:49]
笑颜:比较高的版本还需要:(我是5.9.0)
libQt5XcbQpa.so.5
├── xcbglintegrations
....... (2017-07-13 09:11)
笑顏大大您好,
呈上一則回覆您的留言後,我緊接著又將/home/james/Qt/5.9.1/gcc_64/plugins/xcbglintegrations/資料夾完整複製於MyApp/目錄下(與MyApp執行檔同層),依然是不行(無qt.conf)。
想請問您編輯時有於.pro檔做了哪些操作嗎?(看執行文件鏈結的依賴庫,我的-rpath應該是設定正確的?)或是您有無設定qt.conf呢? ./platforms和./plugins/platforms到底哪個才真的有用? (看官方文檔是說沒設定qt.conf的話,預設會去抓取可執行程序同級目錄的platforms..),您後來是直接執行可執行文件成功?還是執行.sh檔成功呢?
問題有點多,不好意思再麻煩笑顏大大了,謝謝您。
p.s. 我是用5.9.1,這個地方折騰了好久,始終無法解決... 焦慮阿
#5 [笑颜 07-13 10:49]
还有个笨办法,你把QT/lib下所有库都拷贝过去,然后一个一个的删除,发现删除不能启动了,那就是需要依赖的,把它还原,再删其他的,最后剩下来的就是需要的。 这几个单独需要依赖的也先添加进去。