Visual c++ 使用clang cl在Visual Studio 2019中使用Openmp 4/5
我正在尝试用OpenMP运行一个简单的项目。由于VisualStudio只支持OpenMP 2,所以我尝试使用VisualStudio2019附带的LLVM clang cl编译和运行该项目。编译部分似乎还可以,但在链接阶段,链接器无法解析OMP函数 这是我的代码,只有一个文件: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
#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