【问题标题】:Libtorch errors when used with QT, OpenCV and Point Cloud Library与 QT、OpenCV 和点云库一起使用时出现 Libtorch 错误
【发布时间】:2022-06-10 17:50:53
【问题描述】:

我正在尝试在项目中使用 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 {

有人知道为什么 libtorch 会抛出这些错误吗?

【问题讨论】:

  • 你能发布你的 CMakeLists.txt 吗?

标签: c++ opencv qt-creator point-cloud-library libtorch


【解决方案1】:

经过多次尝试,我设法将这四个库绑定在一起并使它们工作。即使解决了原始问题中提到的错误,也有许多问题需要解决。我将简要描述我所做的事情,以便如果有人会遇到这个问题来知道如何解决它。 qt pcl 和 libtorch 由于库和函数或结构同名,存在很多冲突。

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

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

  3. 下面提到的保护必须添加到使用 libtorch 的文件中。这些将消除原始问题中的错误。该错误是由于 qt 插槽与同名的 libtorch 结构冲突造成的。

              #undef slots
    
              #include <torch/torch.h>
    
              #include <torch/script.h>
    
              #define slots Q_SLOTS
    
  4. 所有与 libtorch 相关的深度学习操作都被添加到一个类中,并且每个都在前面加上 static 关键字(所以我将它们设为静态函数)。然后像类中的任何其他静态函数一样调用操作:“className::libtorchOperation()”。

  5. 我必须将${TORCH_INCLUDE_DIRS} 添加到 CMakeLists 文件的包含目录中,并且还必须在主 CMakeLists.txt set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -luuid") 中添加以下行。 一个有帮助的链接是Here

就是这样......它修复了原始问题中的错误并使四个框架一起运行。

【讨论】:

    猜你喜欢
    • 2015-05-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-10
    • 1970-01-01
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多