我正在尝试在项目中使用 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
它修复了原始问题中的错误,并使四个框架一起发挥作用。
标签:core,qt,Point,ATen,Library,QTOpenCV,libtorch,ivalue,include From: https://www.cnblogs.com/runtimeerror/p/18312744