首页 > 其他分享 >Libtorch与QTOpenCV 和 Point Cloud Library 一起使用时出现错误

Libtorch与QTOpenCV 和 Point Cloud Library 一起使用时出现错误

时间:2024-07-20 22:30:04浏览次数:12  
标签:core qt Point ATen Library QTOpenCV libtorch ivalue include

我正在尝试在项目中使用 libtorch、qt 小部件、点云库 (pcl) 和 opencv。对于这个项目,我使用的是cmake列表。问题是当我同时使用所有四个库时,libtorch 会抛出错误。如果我使用 libtorch、opencv 和 qt,一切正常,如果我使用 pcl qt 和 opencv,一切也都很好。我得到的错误列在下面:

/libtorch/include/torch/csrc/jit/api/object.h: In member function ‘size_t torch::jit::Object::num_slots() const’:
/libtorch/include/torch/csrc/jit/api/object.h:173:28: error: expected unqualified-id before ‘(’ token 173 return _ivalue()->slots().size();
/libtorch/include/ATen/core/ivalue_inl.h: In member function ‘c10::intrusive_ptr c10::IValue::toCustomClass() const &’:
/libtorch/include/ATen/core/ivalue_inl.h:1642:3: error: expected unqualified-id before ‘(’ token
1642 | TORCH_CHECK(
/libtorch/include/ATen/core/ivalue_inl.h: In member function ‘c10::intrusive_ptr c10::IValue::toCustomClass() &&’:
/libtorch/include/ATen/core/ivalue_inl.h:1624:3: error: expected unqualified-id before ‘(’ token
1624 | TORCH_CHECK(
| ^~~~~~~~~~~
/libtorch/include/ATen/core/ivalue_inl.h:1419:36: error: expected unqualified-id before ‘)’ token
1419 | const std::vector& slots() const {

经过多次尝试,我设法将四个库绑定在一起并使其正常工作。即使在解决了原始问题中提到的错误之后,也必须解决许多问题。我将简要描述我做了什么,以便如果有人遇到这个问题,就知道如何解决它。 qt pcl 和 libtorch 之间由于同名的方法或结构存在许多冲突。

首先,我从代码中删除了所有函数,并在从某个库(即)调用的每个函数或结构的前面使用了范围解析运算符。

using namespace someLibrary;someLibrary::some_function()

我在共享库中添加了与 libtorch 相关的所有内容。这里应该注意的是,库的 CMakeLists.txt 文件中提到的所有 libtorch 文件和目录都必须存在于主项目文件的CMakeLists.txt中。

下面提到的守卫必须添加到使用 libtorch 的文件中。这些将删除与原始问题中的错误相同的错误。这些错误是由 qt 插槽与同名的 libtorch 结构冲突引起的。

#undef slots

#include <torch/torch.h>

#include <torch/script.h>

#define slots Q_SLOTS

它修复了原始问题中的错误,并使四个框架一起发挥作用。

参考文章:https://stackoverflow.com/questions/72533139/libtorch-errors-when-used-with-qt-opencv-and-point-cloud-library

标签:core,qt,Point,ATen,Library,QTOpenCV,libtorch,ivalue,include
From: https://www.cnblogs.com/runtimeerror/p/18312744

相关文章

  • (ECCV2024论文解读)GPSFormer: A Global Perception and Local Structure Fitting-based
    目录摘要1、引言2、方法2.1 背景3.2 全局感知模块2.3 局部结构拟合卷积泰勒级数局部结构拟合卷积显式结构引入2.4 GPSFormer点云分类部件分割任务3、实验3.13D形状分类ScanObjectNN数据集上的形状分类ModelNet40数据集上的形状分类3.2部件分割3.3小样本分类3.4消融研究全局感......
  • Self-Supervised Learning for Point Clouds Data: A Survey
    摘要综述了自监督学习(SSL)在3D点云数据处理领域的最新进展,对现有SSL方法进行了细致的分类和评估,并在多个基准数据集上对代表性方法进行了性能比较。同时指出了现有研究的局限性,提出了未来研究的方向。Introduction文章主要是针对自监督学习的(SSL),详细阐述了3D点云数据由于其......
  • Self-supervised Learning for Pre-Training 3D Point Clouds: A Survey
    Abstract点云数据由于其紧凑的形式和表示复杂3D结构的灵活性而被广泛研究。点云数据准确捕获和表示复杂3D几何形状的能力使其成为广泛应用的理想选择,包括计算机视觉,机器人技术和自动驾驶,所有这些都需要了解底层空间结构。这种方法旨在从未标记的数据中学习通用和有用的点云表......
  • NAG Fortran Numerical Library帮助解决跨行业最复杂数学挑战
    NAGLIB库:NAGFortranNumericalLibrary帮助解决跨行业最复杂的数字挑战。NAG库算法本质上具有灵活性——它们可以从多种语言中调用,包括C和C++、VBA、Python、Java、.NET和Fortran。世界知名,专家支持世界上最大的商用库,包含强大、有文档记录且经过测试的数值和统计......
  • PointNet笔记
    可能遇到的问题在windows上运行pointnet的代码时,可能会遇到一些问题:1.比如提示OSError:nofilewithexpectedextension,这是因为可视化的show3d_balls.py文件运行不了,具体的解决方法可以看这篇文章:https://blog.51cto.com/u_16213693/7738038。2.由于作者的pointnet所用的p......
  • LD_LIBRARY_PATH 环境变量
    由来LD_LIBRARY_PATH这个环境变量的名字来源于Unix和Linux系统中动态链接器(DynamicLinker)的命名约定,这里的"LD"实际上是"Loader"的缩写,特指动态链接器。动态链接器负责在程序运行时解析和加载共享库(动态链接库)。在Unix和Linux系统中,动态链接器通常是ld.so,它是系......
  • SciTech-EECS-PCB设计- PCB设计-原理图设计 - Schematic library(原理图元器件库)的设
    原理图绘制的“环境参数设置”设置原理图绘制的“环境参数”步骤大体有:在ad软件主界面菜单,选择“File->New->Project”,在创建工程的窗口,看见一个名称为PCB_Project1.PrjPCB的新工程。按照前面所介绍的“添加原理图”的方法,添加名称为“Sheet1.SchDoc”的“原理图文件”。......
  • 报错\corelibrary\think\cache\driver\File.php
    这个错误通常发生在尝试使用 unserialize() 函数反序列化一个存储的缓存数据时,但提供的缓存数据无法被正确解析。在 \core\library\think\cache\driver\File.php 文件的第117行左右,框架尝试从文件中读取缓存数据并反序列化它。以下是一些可能的解决方案:检查缓存文件内容:首......
  • SpringAOP中的切点表达式Pointcut详解
    https://www.jb51.net/program/293999439.htm 一、概述SpringAOP只支持SpringBean的方法切入,所以切点表达式只会匹配Bean类中的方法。二、切点表达式配置1.内置配置定义切面通知时,在 @Before 或 @AfterReturning 等通知注解中指定表达式。12345......
  • [题解] CF19D Points
    [题解]CF19DPointsCF19DPoints在一个笛卡尔坐标系中,定义三种操作:addxy:在坐标系上标记一个点\((x,y)\),保证\((x,y)\)在添加前不在坐标系上。removexy:移除点\((x,y)\),保证\((x,y)\)在移除前已在坐标系上。findxy:找到所有已标记的\((x',y')\),需满......