std::boyer_moore_searcher和std::execution::par在AppleClang 14.



我在Macbook Air上运行macOS Monterey 12.6.1,没有进一步的更新可用。我检查了我的AppleClang版本,它是14.0.0。如果我用std::boyer_moore_searcher编译一个简单的c++代码,这个函数不会像这篇文章中指出的那样被发现。是否有任何原因导致C++17特性仍然不被支持?有办法让它工作吗?我无法安装最新的macOS Ventura,因为它甚至不支持手动安装。最新的macOS是否可以解决看似过时的clang头的问题,因为我可以进一步更新其他软件?

https://en.cppreference.com/w/cpp/17

根据这个图表,Apple Clang仍然不支持你想要的执行策略。

由于正常的Clang也不支持这个,你可以尝试安装GCC和它的标准库来代替。

@DXPower

这个表实际上不是很清楚,如果你读"并行算法和执行策略"这一行的话。你会发现Intel Parallel STL表被标记为。

你确实可以使用clang的并行算法,但你必须链接到tbb和tbbmalloc(静态或动态),并从英特尔下载和安装oneDPL

英特尔oneDPL

或使用homebrew安装:

install onedpl

安装后,您可以从文件夹

访问算法。/opt/homebrew/include/oneapi(如果在Mac Os Ventura上安装了homebrew)

或在旧的操作系统

下/usr/地方/include/oneapi

为了避免链接错误,最好以以下方式包含标题(示例)

#include <dpl/algorithm>
#include <dpl/execution>

然后调用(example)

std::for_each(std::execution::par_unseq ... more code)

你可以在Android或iOS中以同样的方式使用parallel stl,见

Android ParallelSTL

大约从2020年开始,我就一直这样使用并行模式。

无论你使用Clang还是Apple Clang,过程都是一样的。

std::boyer_moore_searcher自XCode 14.3:

XCode 14.3发布说明

最新更新