CMake не может найти OpenMP
Я пытаюсь скомпилировать с помощью OpenMP. Мой CMakeLists.txt
содержит строку
find_package(OpenMP REQUIRED)
и ошибки CMake с помощью
CMake Error at /opt/ros/groovy/share/catkin/cmake/catkinConfig.cmake:72 (find_package):
Could not find a configuration file for package openmp.
Set openmp_DIR to the directory containing a CMake configuration file for
openmp. The file will have one of the following names:
openmpConfig.cmake
openmp-config.cmake
Проверяя свою файловую систему, я вижу, что у меня есть /usr/share/cmake-2.8/Modules/FindOpenMP.cmake
, но не openmpConfig.cmake
или openmp-config.cmake
. Что мне нужно сделать, чтобы исправить это?
Ответы
Ответ 1
OpenMp
не является пакетом, если он поддерживается, он входит в состав вашего компилятора. Попробуйте установить CMAKE_C_FLAGS
или CMAKE_CXX_FLAGS
соответственно. например:
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fopenmp")
активирует OpenMp
для компиляции источников C
при использовании gcc
. Для других компиляторов вы должны сначала обнаружить компилятор, а затем добавить соответствующие флаги
Ответ 2
CMake имеет модуль FindOpenMP даже в версиях 2.x. См. http://www.cmake.org/cmake/help/v3.0/module/FindOpenMP.html
Итак, я сделаю это:
OPTION (USE_OpenMP "Use OpenMP" ON)
IF(USE_OpenMP)
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()
ENDIF()
Ответ 3
Ответ iFINITEi не работает для меня.
Я использую Ubuntu, пытаясь скомпилировать код со статической библиотекой OpenCV
. После ссылки я получил это:
'"/usr/bin/ld: /usr/local/lib/libopencv_core.a(parallel.cpp.o): undefined reference to symbol '[email protected]@OMP_1.0'"'
Поэтому я попробовал подход iNFINITEi, то у меня есть:
'Ошибка CMake в /usr/local/share/cmake-3.13/Modules/FindPackageHandleStandardArgs.cmake:211 (сообщение): Не указано REQUIRED_VARS для FIND_PACKAGE_HANDLE_STANDARD_ARGS() Стек вызовов (самый последний вызов сначала): /usr/local/share/cmake-3.13/Modules/FindOpenMP.cmake:513 (find_package_handle_standard_args) CMakeLists.txt: 8 (FIND_PACKAGE) '
Наконец, я добавляю "-fopenmp=libomp"
к CMAKE_CXX_FLAGS
, решил мою проблему.