Visual c++ 使用clang cl在Visual Studio 2019中使用Openmp 4/5

Visual c++ 使用clang cl在Visual Studio 2019中使用Openmp 4/5,visual-c++,clang,openmp,visual-studio-2019,Visual C++,Clang,Openmp,Visual Studio 2019,我正在尝试用OpenMP运行一个简单的项目。由于VisualStudio只支持OpenMP 2,所以我尝试使用VisualStudio2019附带的LLVM clang cl编译和运行该项目。编译部分似乎还可以,但在链接阶段,链接器无法解析OMP函数 这是我的代码,只有一个文件: #include <stdio.h> void fn() { #pragma omp parallel num_threads(5) { int i; #p

我正在尝试用OpenMP运行一个简单的项目。由于VisualStudio只支持OpenMP 2,所以我尝试使用VisualStudio2019附带的LLVM clang cl编译和运行该项目。编译部分似乎还可以,但在链接阶段,链接器无法解析OMP函数

这是我的代码,只有一个文件:

#include <stdio.h>

void fn() {
    #pragma omp parallel num_threads(5)
    {
        int i;
        #pragma omp task depend(in : i)
        for (i = 0; i < 1; i++) {
            printf("task\n");
        }
    }
}

int main() {
    printf("hello\n");
    fn();
}
我正在使用VisualStudioCommunity2019。那么如何配置项目以使OpenMP工作呢


我也尝试过像这样编译,而且效果很好

clang -fopenmp -o Source.obj -c Source.cpp
clang -fopenmp -o Source.exe Source.obj
它也适用于clang cl

clang-cl -Xclang -fopenmp -o Source.obj -c Source.cpp
clang-cl /clang:-fopenmp -o Source.exe Source.obj -v

但是我不知道如何让Visual Studio使用上述方法构建项目。

是否已将库添加到项目依赖项中?

您可能正在链接错误的openmp库。我想问题是您正在构建x64版本,但是正在链接x86库。注意有两个目录: …\VC\Tools\Llvm\lib
…\VC\Tools\Llvm\x64\lib

是的,我已经添加了包含
libomp.lib
libiomp5md.lib
C:\ProgramFiles(x86)\Microsoft Visual Studio\2019\Community\VC\Tools\Llvm\lib
的文件夹,我还没有看到您的程序中包含OpenMP的头?!您打算如何使用此库而不包括其标题?即使有标题,它仍然无法工作。此外,我可以使用
clang
在GitBash中编译和运行,即使没有标头,您也不需要为您的程序包含OpenMP标头,以便需要针对OpenMP运行时进行链接。所有这些
#pragma omp
转换为对
libomp
libiomp5md.lib
中函数的调用在这里肯定是无用的,因为它是二进制的,相当于
libomp.lib
。以及链接器的
-fopenmp
。我已经检查过了,该程序现在在VS16.6.2中编译和运行得非常完美。啊,忘了你应该在
Microsoft.Cpp.ClangCl.Common.targets
中关闭多线程错误,就像这样
clang-cl -Xclang -fopenmp -o Source.obj -c Source.cpp
clang-cl /clang:-fopenmp -o Source.exe Source.obj -v