【问题标题】:How do you use c++17 parallel standard library algorithms on mac?mac上如何使用c++17并行标准库算法?
【发布时间】:2020-05-30 18:08:37
【问题描述】:

我想在我的 cmake 项目中使用来自 c++17 标准库的并行排序(它是跨平台的,在 Linux 和 MSYS2 上运行良好)但是 Apple Clang's libc++ has not implemented it yet, while gnu's libstdc++ has。 mac上的cmake项目中如何使用gnu实现c++17的库?

【问题讨论】:

  • 如果编译器不支持某些功能,那么 CMake 无法帮助它。不知道你想从我们这里得到什么......
  • 是否可以使用 GNU 的标准库,也许使用 -stdlib=libstdc++
  • CMake 可能只是因为它用于配置编译器和库而相关,并且它可能具有我不知道的功能,这可能会有所帮助。 -stdlib=libstdc++ 似乎没有什么不同。在它工作的系统上,并行库使用include <execution>。在 Mac 上,这会导致 fatal error: 'execution' file not found
  • 使用glocate -r "/execution$",我在/usr/local/Cellar/gcc/9.2.0_1/include/c++/9.2.0/execution 找到了一个执行标头,所以我添加了包含目录,但该标头包含其他丢失的文件,例如#include <bits/c++config.h>。 brew 的解决方案是安装一些库并添加适当的包含/链接标志吗?我正在为此寻找一个 brew 包,但找不到。
  • 你想使用gcc编译器而不是clang吗?如果是这样,只需将适当的 CMAKE_CXX_COMPILER 选项传递给 CMake。或者设置CXX 环境变量。参见例如那个问题:stackoverflow.com/a/22619145/3440745.

标签: c++ macos cmake parallel-processing c++17


【解决方案1】:

我找到的解决方案是从源代码构建 gcc 并使用该编译器及其附带的库。它还需要与-static-libgcc -static-libstdc++ 静态链接。我在切换到 gnu 标准库后也遇到了 fmt 库的问题,但通过使用 fmt 的仅标头版本解决了这个问题。

Here's 包含完整详细信息的 CMakeLists.txt 文件。

【讨论】:

    猜你喜欢
    • 2021-04-07
    • 2021-03-04
    • 2016-12-29
    • 2018-04-05
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    相关资源
    最近更新 更多