当前位置: 首页 > 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!
至此,问题解决。欢迎留言交流

相关文章:

【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_GUISupportQtQu…...

学习java的日子 Day64 学生管理系统 web2.0 web版本

MVC设计模式 概念 - 代码的分层 MVC:项目分层的思想 字母表示层理解MModle模型层业务的具体实现VView视图层展示数据CController控制器层控制业务流程(跳转) 1.细化理解层数 Controller:控制器层,用于存放Servlet&…...

【第14章】Spring Cloud之Gateway路由断言(IP黑名单)

文章目录 前言一、内置路由断言1. 案例(Weight)2. 更多断言 二、自定义路由断言1. 黑名单断言2. 全局异常处理3. 应用配置4. 单元测试 总结 前言 Spring Cloud Gateway可以让我们根据请求内容精确匹配到对应路由服务,官方已经内置了很多路由断言,我们也…...

3、pnpm yarn npm

项目里实际上就只有这些依赖 node module 里却有很多的包 原因: 比如说vue,vue内部有依赖了其余的包。工具又依赖了别的依赖 造成的问题:我可以直接去用这个包,但是这个包在package.json中却没有看到-----幽灵依赖 那如果说别…...

❄️5. Kubernetes核心资源之名称空间和Pod实战

**什么是名称空间Namespace: ** Namespace是k8s系统中的一种非常重要资源,它的主要作用是用来实现多套环境的资源隔离或者多用户的资源隔离。默认情况下,k8s集群中的所有的Pod都是可以相互访问的。但是在实际中,可能不想让两个Pod之间进行互…...

锂电池充电板电路设计

写这篇文章的目的主要是个人经验的总结,希望能给开发者们提供一种锂电池充电电路以及电源显示的电路思路。接下来从以下几个方面讲述电路。 设计这款电路的初衷是想用一块硬币大小的锂电池作为供电电源(3.5V-4.2V),降压供给3.3V电…...

工业互联网产教融合实训基地解决方案

一、引言 随着“中国制造2025”战略的深入实施与全球工业4.0浪潮的兴起,工业互联网作为新一代信息技术与制造业深度融合的产物,正引领着制造业向智能化、网络化、服务化转型。为培养适应未来工业发展需求的高素质技术技能人才,构建工业互联网…...

高效批量提取PPT幻灯片中图片的方法

处理包含大量图片的PPT(PowerPoint)幻灯片已成为许多专业人士的日常任务之一。然而,手动从每张幻灯片中逐一提取图片不仅耗时耗力,还容易出错。为了提升工作效率,减少重复劳动,探索并实现一种高效批量提取P…...

怎么在 React Native 应用中处理深度链接?

深度链接是一种技术,其中给定的 URL 或资源用于在移动设备上打开特定页面或屏幕。因此,深度链接可以引导用户到应用程序内的特定屏幕,而不仅仅是启动移动设备上的应用程序,从而提供更好的用户体验。这个特定的屏幕可能位于一系列层…...

el-table自动滚动到最底部

我的需求是这样的,因为我的表格是动态的,可以手动新增行,固定表头,而且需要一屏显示,为了方便用户就需要再新增的时候表格自动向上滚动。 差了官方文档后发现有一个属性可以支持 这个属性正是自己需要的,所…...

小白零基础学数学建模系列-引言与课程目录

目录 引言一、我们的专辑包含哪些内容?第一周:数学建模基础与工具第二周:高级数学建模技巧与应用第三周:机器学习基础与数据处理第四周:监督学习与无监督学习算法第五周:神经网络 二、学完本专辑能收获到什…...

Integer类型比较是 == 还是equals()

在Java编程中,判断两个Integer对象是否相等时,我们经常遇到使用和equals()方法的选择问题。这两个操作符和方法在判断对象相等性时有所不同,理解它们的区别对于编写健壮的代码至关重要。 使用判断Integer相等性 在Java中,操作符…...

七夕情人节送什么礼物?看完这篇你就知道了

在这个充满爱意的时刻,送上一份精心挑选的礼物,不仅能表达你的爱意,更能加深彼此之间的情感联系。然而,选择一份合适的情人节礼物并非易事,因为每个人都有其独特的需求和喜好。如果你还在为情人节送什么礼物而纠结&…...

让B站直接变成一个纯粹的音乐平台的简单小方法

可能在大多数人眼里,B站就是一个内容丰富的高质量视频平台 但实际上B站还是一个“音乐平台”,只不过大多数时候都是以视频的形式呈现,所以你们可能对此没啥感觉。 那么今天给大家分享一款神级插件,让B站变成一个纯粹的音乐平台&a…...

【MySQL 01】在 Ubuntu 22.04 环境下安装 MySQL

文章目录 🌈 1. 说明🌈 2. 卸载不必要的环境🌈 3. 安装 MySQL🌈 4. 启动和关闭 MySQL 服务🌈 5. 临时登录 MySQL🌈 6. 设置 MySQL 密码🌈 7. 配置 MySQL 🌈 1. 说明 在安装与卸载中…...

linux命令 根据某一字段去掉txt中重复的数据

前提: 文档为格式化好的数据。比如一行是一个json。 判断总共有多少行数据: grep No f.txt | wc -l 查询重复数据有多少行: grep No f.txt | sort -u | wc -l 找到重复的那行数据:(如果每行的json数据大,可忽略此操…...

LVS(Linux virual server)

一:环境准备: rhel9 软件:httpd, ipvsadm 四台纯净的rhel9机子:一台LVS调度设备(双网卡),两台webserver(单网卡仅主机),一台客户机 DR模式多…...

End-to-End Object Detection with Transformers(Detection Transformer)翻译

摘要 我们提出了一种新方法,将目标检测视为直接的集合预测问题。我们的方法简化了检测流程,有效消除了对许多手工设计组件的需求,如非极大值抑制过程或锚框生成,这些组件显式编码了我们对任务的先验知识。新框架称为检测变换器&a…...

uniapp打开地图直接获取位置

uniapp官网文档 https://en.uniapp.dcloud.io/api/location/open-location.html <view class"map-content" click.stop"kilometer(item)"><view class"km">{{item.distance||0}}km</view></view>import map from ../../…...

Qt的事件处理机制、信号和槽以及两者之间的区别

Qt的事件处理机制 Qt 的事件处理机制是其框架的核心部分之一&#xff0c;用于处理用户操作、系统事件以及其他各种事件。以下是 Qt 事件处理机制的关键组成部分和流程&#xff1a; 事件对象 (QEvent)&#xff1a; 所有事件在 Qt 中都是通过事件对象来表示的。QEvent 是所有事…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

ServerTrust 并非唯一

NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

C++.OpenGL (10/64)基础光照(Basic Lighting)

基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...