This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug libstdc++/52590] std::thread Segmentation fault static linking
- From: "jason at cornsyrup dot org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Thu, 15 Mar 2012 04:14:40 +0000
- Subject: [Bug libstdc++/52590] std::thread Segmentation fault static linking
- Auto-submitted: auto-generated
- References: <bug-52590-4@http.gcc.gnu.org/bugzilla/>
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52590
--- Comment #3 from Jason Toffaletti <jason at cornsyrup dot org> 2012-03-15 04:14:40 UTC ---
$ g++-4.7 -Wl,-M -v -static -pthread -std=c++0x -o thread thread.cc shows all
of libpthread being linked.
With a bit more digging I traced the problem to
/usr/include/c++/4.7.0/x86_64-linux-gnu/bits/gthr-posix.h declaring all of its
symbols with __attribute__((weakref)) even when linking statically. Which
caused the __gthread_* symbols to resolve to zero. I found this for some
background info http://gcc.gnu.org/ml/gcc/2005-10/msg00235.html
This change made my example work:
$ g++ -D_GLIBCXX_GTHREAD_USE_WEAK=0 -static -pthread -std=c++0x -o thread
thread.cc
$ ./thread
pthread_create works
std::thread works
However, if I change the code to call std::thread::detach instead of join, then
it crashes again with std::thread::detach being resolved to zero.
Program received signal SIGSEGV, Segmentation fault.
0x0000000000000000 in ?? ()
(gdb) bt
#0 0x0000000000000000 in ?? ()
#1 0x0000000000439785 in std::thread::detach() ()
#2 0x0000000000401f52 in main ()