Clang OpenMP版本,无法获取最新

我已经按照https://apt.llvm.org/中的说明安装了clang和llvm版本9。

接下来,我尝试从clang编译器获取我的openmp版本,所以我创建了文件 openmp_v.cpp

#include <unordered_map>
#include <cstdio>
#include <omp.h>

int main(int argc,char *argv[])
{
  std::unordered_map<unsigned,std::string> map{
    {200505,"2.5"},{200805,"3.0"},{201107,"3.1"},{201307,"4.0"},{201511,"4.5"}};
  printf("We have OpenmP %s.\n",map.at(_OPEnmP).c_str());
  printf("Version: %d.\n",_OPEnmP);
  return 0;
}

并进行编译:

clang++-9 -std=c++17 -fopenmp openmp_v.cpp -o openmp_v -fopenmp=libiomp5

结果是:

We have OpenmP 3.1.
Version: 201107.

问题在于openmp版本应为 4.5 而不是3.1,因为clang-9支持openmp 4.5。

我什至安装了libomp-9-dev,但没有任何改变。 另外,我在以下位置找到了llvm-9的include和lib文件:/ usr / lib / llvm-9 并尝试将它们添加为:

clang++-9 -std=c++17 -fopenmp openmp_v.cpp -o openmp_v -fopenmp=libiomp5 -I /usr/lib/llvm-9/include/openmp -L /usr/lib/llvm-9/lib/

但是它仍然不起作用。

lxleesjs 回答:Clang OpenMP版本,无法获取最新

编辑:用回复替换占位符。

与一个clang开发人员进行了一些交谈之后,还不清楚这是clang中的错误还是更多功能。恕我直言,当从干线代码版本分支了lang 9.0时,_OPENMP的版本字符串可能未正确设置。

存储库中的主线版本正确报告了201511的{​​{1}},这对应于OpenMP API版本4.5。我认为这是正确的,因为据我所知,clang尚未完全支持OpenMP 5.0。

因此,clang 10.0.0将正确报告版本号。我不确定是否会有clang 9.0.0的错误修正版本也可以解决这个问题。

希望有帮助!

本文链接:https://www.f2er.com/3104624.html

大家都在问