Libtorch与QTOpenCV 和 Point Cloud Library 一起使用时出现错误
我正在尝试在项目中使用 libtorch、qt 小部件、点云库 (pcl) 和 opencv。对于这个项目,我使用的是cmake列表。问题是当我同时使用所有四个库时,libtorch 会抛出错误。如果我使用 libtorch、opencv 和 qt,一切正常,如果我使用 pcl qt 和 opencv,一切也都很好。我得到的错误列在下面:
copy/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 之间由于同名的方法或结构存在许多冲突。
首先,我从代码中删除了所有函数,并在从某个库(即)调用的每个函数或结构的前面使用了范围解析运算符。
copyusing namespace someLibrary;someLibrary::some_function()
我在共享库中添加了与 libtorch 相关的所有内容。这里应该注意的是,库的 CMakeLists.txt 文件中提到的所有 libtorch 文件和目录都必须存在于主项目文件的CMakeLists.txt中。
下面提到的守卫必须添加到使用 libtorch 的文件中。这些将删除与原始问题中的错误相同的错误。这些错误是由 qt 插槽与同名的 libtorch 结构冲突引起的。
copy#undef slots #include <torch/torch.h> #include <torch/script.h> #define slots Q_SLOTS
它修复了原始问题中的错误,并使四个框架一起发挥作用。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步