]> https://gitweb.dealii.org/ - dealii.git/commitdiff
CMake: Ensure we use "-pthread" instead of "-lpthread" for thread support 14540/head
authorMatthias Maier <tamiko@43-1.org>
Wed, 7 Dec 2022 00:45:53 +0000 (18:45 -0600)
committerMatthias Maier <tamiko@43-1.org>
Wed, 7 Dec 2022 04:03:07 +0000 (22:03 -0600)
cmake/configure/configure_00_threads.cmake

index 636462807689b8279663649b32b8bc8ffdf10c2a..bf23959163029d491df25a86e8bb3fdd3faa3431 100644 (file)
 # Clear the test flags because FindThreads.cmake will use a C compiler:
 clear_cmake_required()
 
-find_package(Threads)
+#
+# Ensure that we use "-pthread" instead of "-lpthread". We require
+# "-pthread" for certain versions of gcc (and standard library thread
+# support). Otherwise the order of libraries might be wrong on the final
+# link interface and we end up with linker errors such as the following:
+#   /usr/bin/ld: [...]/step-69.cc.o: undefined reference to symbol 'pthread_create@@GLIBC_2.2.5'
+#   /usr/bin/ld: /usr/lib/x86_64-linux-gnu/libpthread.so: error adding symbols: DSO missing from command line
+#
+set(THREADS_PREFER_PTHREAD_FLAG true)
 
+find_package(Threads)
 reset_cmake_required()
 
 add_flags(DEAL_II_LINKER_FLAGS "${CMAKE_THREAD_LIBS_INIT}")
 
+#
+# Make sure that we compile with "-pthread" as well. The "-pthread"
+# compiler flag might add certain preprocessor definitions when compiling.
+#
+if("${CMAKE_THREAD_LIBS_INIT}" MATCHES "-pthread")
+  add_flags(DEAL_II_CXX_FLAGS "${CMAKE_THREAD_LIBS_INIT}")
+endif()
+
 if(NOT Threads_FOUND)
   message(FATAL_ERROR
     "\nFatal configuration error: CMake was unable to detect any threading "

In the beginning the Universe was created. This has made a lot of people very angry and has been widely regarded as a bad move.

Douglas Adams


Typeset in Trocchi and Trocchi Bold Sans Serif.