Я пытался создать многопоточное приложение с помощью cmake в моем контейнере. Он не удался, когда я пытался найти OpenMP 3.0 с FindOpenMP, но работал нормально, если FindOpenMP был удален. Вот мой тест
#include <omp.h>
int main(void) {
omp_get_max_threads();
return 0;
}
и конфигурация
cmake_minimum_required(VERSION 3.15)
project(test)
find_package(Threads REQUIRED)
find_package(OpenMP 3.0 REQUIRED)
add_executable(test test.cpp)
target_link_libraries(test
PUBLIC gomp)
CMake пожаловался на отсутствие переменной, но когда я закомментировал строку find_package(OpenMP 3.0 REQUIRED)
, он прошел все проверки.
-- The C compiler identification is GNU 9.2.0
-- The CXX compiler identification is GNU 9.2.0
-- Check for working C compiler: /opt/gcc/9.2.0/bin/gcc
-- Check for working C compiler: /opt/gcc/9.2.0/bin/gcc -- 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: /opt/gcc/9.2.0/bin/c++
-- Check for working CXX compiler: /opt/gcc/9.2.0/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
CMake Error at /usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
Could NOT find OpenMP_C (missing: OpenMP_pthread_LIBRARY) (found suitable
version "4.5", minimum required is "3.0")
Call Stack (most recent call first):
/usr/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
/usr/share/cmake/Modules/FindOpenMP.cmake:477 (find_package_handle_standard_args)
CMakeLists.txt:6 (find_package)
-- Configuring incomplete, errors occurred!
Мой контейнер был построен по последнему альпийскому изображению. G CC 9.2.0 был построен вручную с параметрами
--enable-languages=c,c++ --disable-multilib --build=x86_64-alpine-linux-musl --host=x86_64-alpine-linux-musl --target=x86_64-alpine-linux-musl --disable-libsanitizer --disable-libatomic --disable-libitm
Изображение docker поддерживается на https://hub.docker.com/repository/docker/leavesask/gcc/general. Я давно использую его для других проектов, но я впервые пытаюсь использовать FindOpenMP.