当前位置: 首页 > news >正文

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

http://www.lryc.cn/news/417825.html

相关文章:

  • 学习java的日子 Day64 学生管理系统 web2.0 web版本
  • 【第14章】Spring Cloud之Gateway路由断言(IP黑名单)
  • 3、pnpm yarn npm
  • ❄️5. Kubernetes核心资源之名称空间和Pod实战
  • 锂电池充电板电路设计
  • 工业互联网产教融合实训基地解决方案
  • 高效批量提取PPT幻灯片中图片的方法
  • 怎么在 React Native 应用中处理深度链接?
  • el-table自动滚动到最底部
  • 小白零基础学数学建模系列-引言与课程目录
  • Integer类型比较是 == 还是equals()
  • 七夕情人节送什么礼物?看完这篇你就知道了
  • 让B站直接变成一个纯粹的音乐平台的简单小方法
  • 【MySQL 01】在 Ubuntu 22.04 环境下安装 MySQL
  • linux命令 根据某一字段去掉txt中重复的数据
  • LVS(Linux virual server)
  • End-to-End Object Detection with Transformers(Detection Transformer)翻译
  • uniapp打开地图直接获取位置
  • Qt的事件处理机制、信号和槽以及两者之间的区别
  • LSTM实战之预测股票
  • 30-50K|抖音大模型|社招3轮面经
  • ChatGPT首次被植入人类大脑:帮助残障人士开启对话
  • 数据结构-常见排序的七大排序
  • 程序员学CFA——财务报告与分析(四)
  • 【消息队列】kafka如何保证消息不丢失?
  • 不同随机数生成的含义
  • Jar工具完全指南:从入门到精通
  • 前端使用docx-preview展示docx + 后端doc转docx
  • Vue3 组件通信
  • 如何在Ubuntu 14.04上安装、配置和部署Rocket.Chat