【VTK】ubuntu手动编译VTK9.3 Generating qmltypes file 失败

环境

硬件: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 -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

在这里插入图片描述
经验教训:libc.so.6不清楚功能的不要轻易动,libc.so.6是glibc(GNU 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,都不能解决。
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目录内。
5、修改qmlplugindump动态库链接

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!
至此,问题解决。欢迎留言交流

  • 11
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值