做網(wǎng)站郴州百度信息流效果怎么樣
環(huán)境
硬件:Jetson Xavier NX 套件
系統(tǒng):Ubuntu 20.04
軟件 :QT5.15.6
解決
0、問題
最近在Jetson Xavier NX 套件上編譯VTK庫,因為想要配合QQuick使用,所以cmake配置時勾選了VTK_MODULE_ENABLE_VTK_GUISupportQtQuick選項,可是在經(jīng)過兩小時編譯后,進度100%時出如下錯誤
Generating qmltypes file using qmlplugindump
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
QQmlComponent: Component is not ready
make[2]: *** [GUISupport/QtQuick/qml/CMakeFiles/qmlvtkplugin.dir/build.make:140: qml/VTK.9.3/libqmlvtkplugin.so] Error 3
make[2]: *** Deleting file 'qml/VTK.9.3/libqmlvtkplugin.so'
make[1]: *** [CMakeFiles/Makefile2:14167: GUISupport/QtQuick/qml/CMakeFiles/qmlvtkplugin.dir/all] Error 2
make: *** [Makefile:130: all] Error 2
經(jīng)過分析發(fā)現(xiàn)是需要使用qmlplugindump工具生成vtk qml插件的qmltypes ??墒窃谂渲胏make時,QMLPLUGINDUMP_EXECUTABLE選項默認配置/usr/bin/qmlplugindump。
1、分析
這個錯誤的原因是由于QT版本與qmlplugindump工具版本不匹配造成的錯誤。
矛盾來了Ubuntu 20.04系統(tǒng)的QT版本默認是QT5.12,由于我編譯的VTK使用的是自己編譯的QT5.15。
Ubuntu 20.04系統(tǒng)的QT版本默認是QT5.12
Ubuntu 22.04系統(tǒng)的QT版本默認是QT5.15
2、思路
思路1、更新系統(tǒng)到Ubuntu 22.04,然后安裝qtdeclarative5-dev-tools【不采用】
可參考qmlplugindump’: No such file or directory”,該思路目前不適合我,直接拋棄
思路2、下載qmlplugindump,修改QMLPLUGINDUMP_EXECUTABLE指向5.15版的qmlplugindump工具【嘗試了,不成功】
可參考ubuntu20.04 運行軟件提示找不到過時的庫,該文章的思路同樣適用于找不到高版本的庫時。
思路3、在ubuntu20.04下編譯qmlplugindump源碼【采用,成功】
詳見【3、解決】
3、解決
0、在ubuntu源下載qtdeclarative5-dev-tools包。
然后直接解壓提取,里面包含qmlplugindump。
1、將qmlplugindump拷貝到編譯的QT5.16庫安裝路徑下的bin目錄內(nèi),修改QMLPLUGINDUMP_EXECUTABLE
2、重新編譯vtk
sudo make -j6
3、OK,OK繞不過的新錯誤
Generating qmltypes file using qmlplugindump
/opt/qt5.15.6_aarch64/bin/qmlplugindump: /lib/aarch64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by /opt/qt5.15.6_aarch64/bin/qmlplugindump)
make[2]: *** [GUISupport/QtQuick/qml/CMakeFiles/qmlvtkplugin.dir/build.make:140: qml/VTK.9.3/libqmlvtkplugin.so] Error 1
make[2]: *** Deleting file 'qml/VTK.9.3/libqmlvtkplugin.so'
make[1]: *** [CMakeFiles/Makefile2:14167: GUISupport/QtQuick/qml/CMakeFiles/qmlvtkplugin.dir/all] Error 2
make: *** [Makefile:130: all] Error 2
經(jīng)驗教訓:libc.so.6不清楚功能的不要輕易動,libc.so.6是glibc(GNU C Library)的核心動態(tài)鏈接庫,它提供了許多基本的系統(tǒng)調(diào)用和函數(shù)。
下載的qmlplugindump 依賴GLIBC_2.34,而系統(tǒng)版本是GLIBC_2.31。
嘗試了網(wǎng)上提供Linux修改ELF解決glibc兼容性問題 和error-lib-x86-64-linux-gnu-libc-so-6-version-glibc-2-33-not-found,都不能解決。
OK,OK目前看來,此路不通。
4、編譯qmlplugindump 源碼
在下載qt-everywhere-src-5.15.6的源碼里,找到qtdeclarative下的tools進入qmlplugindump ,
sudo qmake qmlplugindump.pro
編譯
make
生成的qmlplugindump在qtdeclarative下的bin路徑下。將新編譯的qmlplugindump拷貝到編譯的QT5.16庫安裝路徑下的bin目錄內(nèi)。
5、修改qmlplugindump動態(tài)庫鏈接
patchelf --set-rpath /opt/qt5.15.6_aarch64/lib /opt/qt5.15.6_aarch64/bin/qmlplugindump
6、再次編譯VTK
[ 99%] Built target ViewsQt
Generating qmltypes file using qmlplugindump
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
[100%] Built target qmlvtkplugin
OK,OK,OK!
至此,問題解決。歡迎留言交流