Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何使用OpenMP在MSVC 2015上工作_C++_Visual Studio 2015_Clang_Openmp - Fatal编程技术网

C++ 如何使用OpenMP在MSVC 2015上工作

C++ 如何使用OpenMP在MSVC 2015上工作,c++,visual-studio-2015,clang,openmp,C++,Visual Studio 2015,Clang,Openmp,我试图让clang 5.0.0为Visual Studio 2015工作,因为我需要OpenMP 3.0功能。我安装了clang编译器(不是没有任何openmp支持的vs2015版本)并使用cmake: cmake_minimum_required(VERSION 2.8.10) project(myproject) find_package(OpenMP) if (OPENMP_FOUND) set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_

我试图让clang 5.0.0为Visual Studio 2015工作,因为我需要OpenMP 3.0功能。我安装了clang编译器(不是没有任何openmp支持的vs2015版本)并使用cmake:

cmake_minimum_required(VERSION 2.8.10)
project(myproject)

find_package(OpenMP)
if (OPENMP_FOUND)
    set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
    set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
endif()

include_directories("include")
add_library(libFoo STATIC Foo.cpp)

install(TARGETS Foo libFoo LIBRARY DESTINATION lib ARCHIVE DESTINATION lib)
当我现在尝试配置带有或不带工具链的
MSVC 14 2015 Win64
构建
LLVM-vs2014
时,我总是收到一个错误,即找不到OpenMP:

The C compiler identification is Clang 5.0.0
The CXX compiler identification is Clang 5.0.0
Check for working C compiler: D:/Program Files/LLVM/msbuild-bin/cl.exe
Check for working C compiler: D:/Program Files/LLVM/msbuild-bin/cl.exe -- works
Detecting C compiler ABI info
Detecting C compiler ABI info - done
Detecting C compile features
Detecting C compile features - done
Check for working CXX compiler: D:/Program Files/LLVM/msbuild-bin/cl.exe
Check for working CXX compiler: D:/Program Files/LLVM/msbuild-bin/cl.exe -- works
Detecting CXX compiler ABI info
Detecting CXX compiler ABI info - done
Detecting CXX compile features
Detecting CXX compile features - done
Could NOT find OpenMP_C (missing: OpenMP_C_FLAGS OpenMP_C_LIB_NAMES) (found version "1.0")
Could NOT find OpenMP_CXX (missing: OpenMP_CXX_FLAGS OpenMP_CXX_LIB_NAMES) (found version "1.0")
Configuring done
使用的编译器似乎是正确的(已安装的clang,而不是Microsoft版本),它自动检测clang cl二进制文件,但OpenMP失败。 我试图用“指定本机编译器”手动指定编译器,并得到相同的结果。它甚至选择了clang cl版本而不是clang++

相关答案,但不能解决问题:

  • -最近的clang包含libomp.lib和libiomp5.dll

这确实有点棘手,而且cmake自动检测似乎工作得不太好。有帮助的是

OpenMP_CXX_FLAGS="-Xclang -fopenmp"
OpenMP_C_FLAGS="-Xclang -fopenmp"
并确保链接库中有
libomp.lib

-Xclang
告诉铿锵二进制文件,以下选项是铿锵格式,而不是MSVC格式,并且-fopenmp只是常用的OpenMP标志。不过,以任何其他方式设置都不起作用


一般模式是:
-Xclang-clangFlag1-Xclang-clangFlag2…
。也就是说,每个铿锵风格的标志都需要自己的
-Xclang

,这些标志位于cmake选项中,它适用于VS 2015.Yep。添加
-Xclang-fopenmp
有效。我不明白为什么他们没有将VS的OpenMP映射到
clang-cl.exe
中。