门户网站建设背景,天猫网站建设,邯郸中国建设银行网站,引擎搜索环境
硬件#xff1a;Jetson Xavier NX 套件 系统#xff1a;Ubuntu 20.04 软件 #xff1a;QT5.15.6
解决
0、问题
最近在Jetson Xavier NX 套件上编译VTK库#xff0c;因为想要配合QQuick使用#xff0c;所以cmake配置时勾选了VTK_MODULE_ENABLE_VTK_GUISupportQtQu…环境
硬件Jetson Xavier NX 套件 系统Ubuntu 20.04 软件 QT5.15.6
解决
0、问题
最近在Jetson Xavier NX 套件上编译VTK库因为想要配合QQuick使用所以cmake配置时勾选了VTK_MODULE_ENABLE_VTK_GUISupportQtQuick选项可是在经过两小时编译后进度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经过分析发现是需要使用qmlplugindump工具生成vtk qml插件的qmltypes 。可是在配置cmake时QMLPLUGINDUMP_EXECUTABLE选项默认配置/usr/bin/qmlplugindump。
1、分析
这个错误的原因是由于QT版本与qmlplugindump工具版本不匹配造成的错误。 矛盾来了Ubuntu 20.04系统的QT版本默认是QT5.12由于我编译的VTK使用的是自己编译的QT5.15。 Ubuntu 20.04系统的QT版本默认是QT5.12 Ubuntu 22.04系统的QT版本默认是QT5.15
2、思路
思路1、更新系统到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目录内修改QMLPLUGINDUMP_EXECUTABLE 2、重新编译vtk
sudo make -j63、OKOK绕不过的新错误
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经验教训libc.so.6不清楚功能的不要轻易动libc.so.6是glibcGNU C Library的核心动态链接库它提供了许多基本的系统调用和函数。 下载的qmlplugindump 依赖GLIBC_2.34而系统版本是GLIBC_2.31。 尝试了网上提供Linux修改ELF解决glibc兼容性问题 和error-lib-x86-64-linux-gnu-libc-so-6-version-glibc-2-33-not-found都不能解决。 OKOK目前看来此路不通。
4、编译qmlplugindump 源码 在下载qt-everywhere-src-5.15.6的源码里找到qtdeclarative下的tools进入qmlplugindump
sudo qmake qmlplugindump.pro编译
make生成的qmlplugindump在qtdeclarative下的bin路径下。将新编译的qmlplugindump拷贝到编译的QT5.16库安装路径下的bin目录内。 5、修改qmlplugindump动态库链接
patchelf --set-rpath /opt/qt5.15.6_aarch64/lib /opt/qt5.15.6_aarch64/bin/qmlplugindump6、再次编译VTK
[ 99%] Built target ViewsQt
Generating qmltypes file using qmlplugindump
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to /tmp/runtime-root
[100%] Built target qmlvtkpluginOKOKOK 至此问题解决。欢迎留言交流