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 ()