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

index 33ae7145c62e17ed7791fe89e1c67e320b63661a..8ade074556ae27af6de69df997f5973dae0a2ee0 100644 (file)
 
 # Clear the test flags because FindThreads.cmake will use a C compiler:
 CLEAR_CMAKE_REQUIRED()
+#
+# 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)
 
 SWITCH_LIBRARY_PREFERENCE()
 FIND_PACKAGE(Threads)
@@ -29,6 +38,14 @@ 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.