3

我有一个项目为我的研究工作了一年多,Oneapi 已经集成了超过 6 个月,一切正常。昨天我更新了一些测试代码,并运行了测试,没有任何异常。今天我重新启动了我的机器(Ubuntu 20.04.2 LTS,64 位)进行更新,现在当我尝试编译它给出的项目时:

In file included from /opt/intel/oneapi/tbb/2021.2.0/env/../include/oneapi/tbb/enumerable_thread_specific.h:26,
                 from /opt/intel/oneapi/tbb/2021.2.0/env/../include/oneapi/tbb/combinable.h:22,
                 from /opt/intel/oneapi/tbb/2021.2.0/env/../include/oneapi/tbb.h:35,
                 from ...file name omitted for privacy...
/opt/intel/oneapi/tbb/2021.2.0/env/../include/oneapi/tbb/concurrent_vector.h:33:10: fatal error: compare: No such file or directory
   33 | #include <compare>
      |          ^~~~~~~~~
compilation terminated.

这仅在系统重新启动后发生(可能破坏了某些链接?)并且仅发生在需要 concurrent_vector.h 的文件中

理想情况下,我更喜欢不需要重新安装oneapi的修复程序,apt-get update然后apt-get upgrade没有修复它,也没有再次重新启动系统。

4

1 回答 1

4

只是遇到了同样的事情。<compare>如果您正在编译,它看起来好像 TBB 自动包含-std=c++20

https://github.com/oneapi-src/oneTBB/blob/9e15720bc7744f85dff611d34d65e9099e077da4/include/oneapi/tbb/detail/_config.h#L253

#define __TBB_CPP20_COMPARISONS_PRESENT                 __TBB_CPP20_PRESENT

GCC 只在 libstdc++-10 中添加了比较头

对我来说,这看起来像是 TBB 中的一个错误。我在这里打开了一个问题。

作为修补程序,我能够将我的项目降级到 C++17。如果这不是一个选项,您可以考虑在您的副本中复制detail/_config.h、定义__TBB_CPP20_COMPARISONS_PRESENT 0并在包含任何 TBB 标头之前将其包含在内。包含保护应确保您的版本取代损坏的 TBB 版本。

于 2021-04-10T10:59:36.817 回答