g++ doesn't compile simple code, using thread header

Bug #1228201 reported by shkiper325 on 2013-09-20
This bug affects 47 people
Affects Status Importance Assigned to Milestone
gcc-defaults (Ubuntu)

Bug Description

Bug is only for 13.10. I'm learning c++ and I tried to write a simple code using std::thread (code is in attachment). I found info, that the code won't build without -pthread/-lpthread g++ option. I build code with every position of this flags and with std=c++11/std=c++0x, but I've got the same error:
shkiper@server:~/C++$ g++ thread.cpp -pthread -std=c++11 -o thread
shkiper@server:~/C++$ ./thread
terminate called after throwing an instance of 'std::system_error'
  what(): Enable multithreading to use std::thread: Operation not permitted
Аварийный останов (сделан дамп памяти)
I tryed to build this code on live cd - same error.
It bullds and works on ubuntu <13.10.
I think, g++ doesn't links pthread lib:
shkiper@server:~/C++$ ldd thread
 linux-vdso.so.1 => (0x00007fff4172b000)
 libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007ff895b72000)
 libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007ff89595c000)
 libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007ff895594000)
 libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007ff895290000)
 /lib64/ld-linux-x86-64.so.2 (0x00007ff895e95000)
shkiper@server:~/C++ ll /usr/lib/x86_64-linux-gnu/ | grep thread
lrwxrwxrwx 1 root root 26 авг. 23 18:27 libfftw3f_threads.so.3 -> libfftw3f_threads.so.3.3.2
-rw-r--r-- 1 root root 26992 дек. 10 2012 libfftw3f_threads.so.3.3.2
lrwxrwxrwx 1 root root 25 дек. 10 2012 libfftw3_threads.so.3 -> libfftw3_threads.so.3.3.2
-rw-r--r-- 1 root root 26992 дек. 10 2012 libfftw3_threads.so.3.3.2
lrwxrwxrwx 1 root root 27 авг. 23 18:27 libgpgme-pthread.so.11 -> libgpgme-pthread.so.11.10.0
-rw-r--r-- 1 root root 207088 июля 30 12:43 libgpgme-pthread.so.11.10.0
lrwxrwxrwx 1 root root 26 сент. 18 16:44 libgthread-2.0.so.0 -> libgthread-2.0.so.0.3793.0
-rw-r--r-- 1 root root 6088 сент. 18 16:45 libgthread-2.0.so.0.3793.0
-rw-r--r-- 1 root root 1801210 авг. 1 02:52 libpthread.a
-rw-r--r-- 1 root root 4756 авг. 1 02:52 libpthread_nonshared.a
-rw-r--r-- 1 root root 252 авг. 1 02:52 libpthread.so
lrwxrwxrwx 1 root root 23 авг. 23 18:27 libssh_threads.so.4 -> libssh_threads.so.4.2.4
-rw-r--r-- 1 root root 6200 мая 3 19:54 libssh_threads.so.4.2.4
lrwxrwxrwx 1 root root 39 авг. 23 18:27 libthread_db.so -> /lib/x86_64-linux-gnu/libthread_db.so.1
lrwxrwxrwx 1 root root 22 февр. 2 2013 libthreadutil.so.6 -> libthreadutil.so.6.0.2
-rw-r--r-- 1 root root 26464 февр. 2 2013 libthreadutil.so.6.0.2

ProblemType: Bug
DistroRelease: Ubuntu 13.10
Package: g++ 4:4.8.1-2ubuntu2
ProcVersionSignature: Ubuntu 3.11.0-7.14-generic 3.11.1
Uname: Linux 3.11.0-7-generic x86_64
ApportVersion: 2.12.4-0ubuntu1
Architecture: amd64
Date: Fri Sep 20 18:58:19 2013
InstallationDate: Installed on 2013-08-23 (28 days ago)
InstallationMedia: Ubuntu 13.10 "Saucy Salamander" - Alpha amd64 (20130822)
MarkForUpload: True
SourcePackage: gcc-defaults
UpgradeStatus: No upgrade log present (probably fresh install)

description: updated
Launchpad Janitor (janitor) wrote :

Status changed to 'Confirmed' because the bug affects multiple users.

Changed in gcc-defaults (Ubuntu):
status: New → Confirmed

code builds using clang:
shkiper@server:~/C++/Thread$ clang++ thread.cpp -o thread -pthread -std=c++11
shkiper@server:~/C++/Thread$ ./thread
so, problem is in g++

Matthias Klose (doko) wrote :

I agree this behaviour is not desired. For now, you can work around it passing -Wl,--no-as-needed.

MeduZa (meduzapat) wrote :

This is fun, but for me the program works fine for few runs then after more coding and recompile, then I start getting this error when executing.
Ubuntu 13.10 g++ 4.8.1

Changed in gcc-defaults (Ubuntu):
importance: Undecided → High
Javier (javiersmail) wrote :

Works on trusty.

tags: added: trusty
tags: removed: trusty
Matthias Klose (doko) wrote :

closing based on the previous comment.

Changed in gcc-defaults (Ubuntu):
status: Confirmed → Fix Released
Come Raczy (come-raczy-f) wrote :

On trusty the problem is still present when linking against any of the boost library (tried both 1.54.0 or 1.55.0) - the workaround (-Wl,--no-as-needed) still works though. This is what I get using the 'thread.cpp' provided above:

craczy@vb:/tmp$ g++ thread.cpp -pthread -std=c++11 -o thread
craczy@vb:/tmp$ ./thread
craczy@vb:/tmp$ g++ thread.cpp -pthread -std=c++11 -o thread -lboost_filesystem
craczy@vb:/tmp$ ./thread
terminate called after throwing an instance of 'std::system_error'
  what(): Enable multithreading to use std::thread: Operation not permitted
Aborted (core dumped)
craczy@vb:/tmp$ cat /etc/lsb-release

Doug Gale (doug16k) wrote :

Static link with `-static` also reproduces the issue, even with `-Wl,--no-as-needed`. Removing `-static` fixed the issue for me.

To post a comment you must log in.
This report contains Public information  Edit
Everyone can see this information.

Other bug subscribers