Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/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++ Cmake不能在Maverick上与openMP一起工作_C++_Cmake_Openmp_Osx Mavericks - Fatal编程技术网

C++ Cmake不能在Maverick上与openMP一起工作

C++ Cmake不能在Maverick上与openMP一起工作,c++,cmake,openmp,osx-mavericks,C++,Cmake,Openmp,Osx Mavericks,我正在使用OpenMP编写并行代码。 下面是我案例中使用的CmakeList的一部分 FIND_PACKAGE( OpenMP REQUIRED) if(OPENMP_FOUND) message("OPENMP FOUND") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${O

我正在使用OpenMP编写并行代码。 下面是我案例中使用的CmakeList的一部分

FIND_PACKAGE( OpenMP REQUIRED)
    if(OPENMP_FOUND)
    message("OPENMP FOUND")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
    endif()
但是,当我们启动cmake时,似乎找不到OpenMP包,我得到了这个错误

Try OpenMP C flag = [ ]
-- Performing Test OpenMP_FLAG_DETECTED
-- Performing Test OpenMP_FLAG_DETECTED - Failed
-- Try OpenMP C flag = [-fopenmp]
-- Performing Test OpenMP_FLAG_DETECTED
-- Performing Test OpenMP_FLAG_DETECTED - Failed
-- Try OpenMP C flag = [/openmp]
-- Performing Test OpenMP_FLAG_DETECTED
-- Performing Test OpenMP_FLAG_DETECTED - Failed
-- Try OpenMP C flag = [-Qopenmp]
-- Performing Test OpenMP_FLAG_DETECTED
-- Performing Test OpenMP_FLAG_DETECTED - Failed
-- Try OpenMP C flag = [-openmp]
-- Performing Test OpenMP_FLAG_DETECTED
-- Performing Test OpenMP_FLAG_DETECTED - Failed
-- Try OpenMP C flag = [-xopenmp]
-- Performing Test OpenMP_FLAG_DETECTED
-- Performing Test OpenMP_FLAG_DETECTED - Failed
-- Try OpenMP C flag = [+Oopenmp]
-- Performing Test OpenMP_FLAG_DETECTED
-- Performing Test OpenMP_FLAG_DETECTED - Failed
-- Try OpenMP C flag = [-qsmp]
-- Performing Test OpenMP_FLAG_DETECTED
-- Performing Test OpenMP_FLAG_DETECTED - Failed
-- Try OpenMP C flag = [-mp]
-- Performing Test OpenMP_FLAG_DETECTED
-- Performing Test OpenMP_FLAG_DETECTED - Failed
-- Try OpenMP CXX flag = [ ]
-- Performing Test OpenMP_FLAG_DETECTED
-- Performing Test OpenMP_FLAG_DETECTED - Failed
-- Try OpenMP CXX flag = [-fopenmp]
-- Performing Test OpenMP_FLAG_DETECTED
-- Performing Test OpenMP_FLAG_DETECTED - Failed
-- Try OpenMP CXX flag = [/openmp]
-- Performing Test OpenMP_FLAG_DETECTED
-- Performing Test OpenMP_FLAG_DETECTED - Failed
-- Try OpenMP CXX flag = [-Qopenmp]
-- Performing Test OpenMP_FLAG_DETECTED
-- Performing Test OpenMP_FLAG_DETECTED - Failed
-- Try OpenMP CXX flag = [-openmp]
-- Performing Test OpenMP_FLAG_DETECTED
-- Performing Test OpenMP_FLAG_DETECTED - Failed
-- Try OpenMP CXX flag = [-xopenmp]
-- Performing Test OpenMP_FLAG_DETECTED
-- Performing Test OpenMP_FLAG_DETECTED - Failed
-- Try OpenMP CXX flag = [+Oopenmp]
-- Performing Test OpenMP_FLAG_DETECTED
-- Performing Test OpenMP_FLAG_DETECTED - Failed
-- Try OpenMP CXX flag = [-qsmp]
-- Performing Test OpenMP_FLAG_DETECTED
-- Performing Test OpenMP_FLAG_DETECTED - Failed
-- Try OpenMP CXX flag = [-mp]
-- Performing Test OpenMP_FLAG_DETECTED
-- Performing Test OpenMP_FLAG_DETECTED - Failed
CMake Error at /opt/local/share/cmake-3.3/Modules/FindPackageHandleStandardArgs.cmake:148 (message):
  Could NOT find OpenMP (missing: OpenMP_C_FLAGS OpenMP_CXX_FLAGS)
这里是CMakeLists.txt

cmake_minimum_required(VERSION 2.6)

#Declaration du projet

project(MYfirstcamke)

set(EXECUTABLE_OUTPUT_PATH bin/${CMAKE_BUILD_TYPE})

#Inclusion de opencv

include_directories(/usr/local/include/)

link_directories(/usr/local/lib)

FIND_PACKAGE( OpenMP REQUIRED)
if(OPENMP_FOUND)
message("OPENMP FOUND")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
endif()

find_package(PCL 1.2 REQUIRED)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})

file(

    GLOB_RECURSE

    source_files

    src/*


)
#declaration de l'executable

add_executable(

my_executable

${source_files}

)
#Configuration de l'edition de lien.
target_link_libraries(

my_executable opencv_core  opencv_imgproc opencv_video opencv_highgui ${PCL_LIBRARIES}


)

我怎样才能解决这个问题?我确信openMPi已经安装并且位于opt/local/include上,OpenMP和MPI是两个完全不同的东西

OMP需要编译器支持,在OSX上需要通过。(您也可以通过自制软件安装MPI,这很好)

在安装了clang omp之后,您可以通过这样调用它来告诉CMake使用该编译器

CC=clang-omp CXX=clang-omp++ cmake <insert your normal cmake parameters here>
CC=clang omp CXX=clang omp++cmake

除了上面的答案,您还可以从自制软件安装gcc-5/g++-5。普通的gcc-5安装(没有铿锵的包装)将支持OpenMP,CMake应该通过Find_包检测到这一点

一种解决方案是安装和使用GNU GCC。假设您已安装或将通过自制
brew安装gcc安装:

if(APPLE)
  set(CMAKE_C_COMPILER "/usr/local/bin/gcc-9")
  set(CMAKE_CXX_COMPILER "/usr/local/bin/g++-9")
  set(CMAKE_Fortran_COMPILER "/usr/local/bin/gfortran")
endif()

此时,
-9
版本可能会更改

你确定你没有混淆OpenMP和OpenMPI吗?我看到你使用了这两个标签,并且在文章的末尾提到了OpenMPI。但两者完全不同。OpenMP是多线程并行语言扩展的标准,OpenMPI是用于消息传递的MPI标准的实现。您想要哪一个?OpenMP不是一个包,而是编译器不可分割的一部分。很久以前,Xcode用于提供支持OpenMP的GCC。然后苹果转向了Clang,它不支持OpenMP,至少在Xcode附带的版本中不支持。您应该从源代码或使用自制/MacPorts/任何东西安装GCC。@Gilles,可能是我混合了OpenMP和OpenMPI。我原以为OpenMP已被弃用并成为OpenMP。@HristoIliev,我已安装了GCC,但如何在CMakeLists.txt中指定编译器。我在问题中添加了CMakeLists.txt文件。我不懂CMake,但可能类似于
export CC=gcc-4.9;在运行CMake之前导出CXX=g++-4.9
就足够了。将
gxx-4.9
替换为相应编译器的实际名称。根据,>“随着Clang 3.8.0的发布,默认情况下在Clang中启用OpenMP 3.1支持,因此OpenMP运行时是作为Clang构建的正常部分构建的”我不明白为什么我仍然必须安装“Clang omp”,你能解释一下原因吗?另一个问题是
clangomp
公式要求使用与
llvm
公式不同版本的clang(以及
compiler rt
等),那么我应该怎么做才能使事情正确呢?我正在尝试使用CMake 3.7和clang4.0,而我的
find_包(需要OpenMP)
失败。
if(APPLE)
  set(CMAKE_C_COMPILER "/usr/local/bin/gcc-9")
  set(CMAKE_CXX_COMPILER "/usr/local/bin/g++-9")
  set(CMAKE_Fortran_COMPILER "/usr/local/bin/gfortran")
endif()