https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58909
--- Comment #22 from Jonathan Wakely <redi at gcc dot gnu.org> ---
In that case it finds the no-op symbol in libc.so.6 and doesn't crash.
$ g++ cv.C -g -Wl,--trace-symbol=pthread_cond_destroy
/usr/bin/ld: /lib64/libc.so.6: definition of pthread_cond_destroy
This fixes the static linking case:
--- a/libstdc++-v3/src/c++11/condition_variable.cc
+++ b/libstdc++-v3/src/c++11/condition_variable.cc
@@ -31,9 +31,19 @@ namespace std _GLIBCXX_VISIBILITY(default)
{
_GLIBCXX_BEGIN_NAMESPACE_VERSION
- condition_variable::condition_variable() noexcept = default;
+ condition_variable::condition_variable() noexcept
+ {
+#if defined __GLIBC__ && ! defined _GLIBCXX_SHARED
+ asm("extern pthread_cond_init");
+#endif
+ }
- condition_variable::~condition_variable() noexcept = default;
+ condition_variable::~condition_variable() noexcept
+ {
+#if defined __GLIBC__ && ! defined _GLIBCXX_SHARED
+ asm("extern pthread_cond_destroy");
+#endif
+ }
void
condition_variable::wait(unique_lock<mutex>& __lock) noexcept