Tôi đang sử dụng OpenMP để viết mã song song. Đây là một phần từ các CMakeLists được sử dụng trong trường hợp của tôi.Cmake không hoạt động với openMP trên Maverick
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()
Tuy nhiên, khi chúng ta bắt đầu cmake .., Dường như nó deos không tìm thấy OpenMP gói và tôi nhận được lỗi này
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)
Đây là 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}
)
thế nào tôi có thể sửa nó không? Tôi chắc chắn rằng openMPi được cài đặt và nó nằm trên opt/local/include
Bạn có chắc chắn bạn không trộn lẫn giữa OpenMP và OpenMPI không? Tôi thấy rằng bạn đã sử dụng cả hai thẻ và bạn tham khảo OpenMPI ở cuối bài đăng. Nhưng cả hai đều hoàn toàn khác nhau. OpenMP là một tiêu chuẩn của phần mở rộng ngôn ngữ song song đa luồng, và OpenMPI là một thực hiện tiêu chuẩn MPI để truyền thông điệp. Bạn là ai sau đó? – Gilles
OpenMP không phải là một gói, mà là một phần không thể tách rời của trình biên dịch. Xcode được sử dụng để cung cấp một GCC OpenMP một thời gian dài trước đây. Sau đó, Apple chuyển sang Clang, mà không có hỗ trợ OpenMP, ít nhất là không có trong các phiên bản vận chuyển với Xcode. Bạn nên cài đặt GCC hoặc từ nguồn hoặc sử dụng Homebrew/MacPorts/bất cứ điều gì. –
@Gilles, Có thể tôi đang trộn giữa OpenMP và OpenMPI. Tôi nghĩ rằng OpenMP đã không được chấp nhận và trở thành OpenMP. – Jeanne