Cmake funktioniert nicht mit openMP auf Maverick
Ich bin mit OpenMP zu schreiben parallelen Codes.
Hier ist ein Abschnitt aus der CMakeLists in meinem Fall.
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()
Aber, wenn wir beginnen cmake .., Es scheint, dass es deos nicht finden OpenMP-Paket und ich bekomme diese Fehlermeldung
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)
Hier 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}
)
Wie kann ich das beheben? Ich bin sicher, dass openMPi ist installiert und es befindet sich auf opt/local/include
- Sind Sie sicher, dass Sie nicht die Vermischung zwischen OpenMP und OpenMPI? Ich sehe, dass Sie sowohl tags, und finden Sie OpenMPI am Ende der post. Aber beide sind völlig unterschiedlich. OpenMP ist ein standard, der von multi-Thread-parallel language extension und OpenMPI ist eine Implementierung des MPI-Standards für message-passing. Welche von den beiden sind Sie nach?
- OpenMP ist nicht ein Paket, sondern ein integraler Bestandteil des Compilers. Xcode verwendet, um eine OpenMP-fähigen GCC-vor langer Zeit. Dann Apple-geschaltet, um Rauschen, welches nicht OpenMP-support, zumindest nicht in den Versionen geliefert mit Xcode. Installieren Sie GCC entweder von der Quelle oder die Verwendung von Homebrew/MacPorts/was auch immer.
- Vielleicht habe ich auch die Vermischung zwischen OpenMP und OpenMPI. Ich dachte, dass die OpenMP-war veraltet und zu OpenMP.
- Ich habe GCC installiert, aber Wie kann ich den compiler angeben CMakeLists.txt. Ich habe die CMakeLists.txt Datei in meiner Frage.
- Ich verstehe nicht, CMake, aber wahrscheinlich so etwas wie
export CC=gcc-4.9; export CXX=g++-4.9
vor der Ausführung von CMake sollte das ausreichen. Ersetzengxx-4.9
mit den tatsächlichen Namen der entsprechenden compiler.
Du musst angemeldet sein, um einen Kommentar abzugeben.
OpenMP und MPI sind zwei völlig verschiedene Dinge.
OMP erfordert compiler-Unterstützung, die auf OS X müssen Sie über Homebrew. (Sie können auch installieren, MPI über Homebrew zu, das ist schön).
Nachdem Sie installiert haben, clang-omp, können Sie dann sagen, CMake zu verwenden, der compiler, indem er wie so.
clang-omp
Formel fragt nach verschiedenen version von clang (undcompiler-rt
etc.) aus derllvm
Formel, also, was soll ich tun, um die Dinge richtig machen?find_package(OpenMP REQUIRED)
ausfällt.Zusätzlich zu der Antwort oben, können Sie auch installieren Sie gcc-5/g++-5 von homebrew. Die plain-vanilla-gcc-5-installation (ohne Klappern-Wrapper) unterstützt OpenMP und dies sollte erkannt von CMake durch Find_Package.