I was trying to build a multi-threading application with cmake in my container. It failed when I tried to find OpenMP 3.0 with FindOpenMP, but worked fine if FindOpenMP was removed. Here is my test
#include <omp.h>
int main(void) {
omp_get_max_threads();
return 0;
}
and the configuration
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 complained that a variable was missing, but when I commented out the line find_package(OpenMP 3.0 REQUIRED)
, it passed all checks.
-- 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!
My container was built from the latest alpine image. GCC 9.2.0 was built manually with options
--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
The docker image is maintained at https://hub.docker.com/repository/docker/leavesask/gcc/general. I've been using it for other projects for a long time, but this is my first time trying to make use of FindOpenMP.