Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 07/06/2012, à 17:04

incises

Thread en C++ sous Ubuntu

Bonjour,
je rencontre un problème étrange, sous Ubuntu LTS 12.04 Precise Pangolin,  64 bits.
Je compile - avec g++ 4.6.3  ce petit programme, tiré du livre d'Antony Williams, C++ Concurrency in Action :

#include <iostream>
#include <thread>

void hello()
{
    std::cout<<"Hello Concurrent World\n";
}

int main()
{
    std::thread t(hello);
    t.join();
}
// listing_1.1.cpp (END)

avec une commande comme :

 g++  -g -Wall -pedantic -std=c++0x -lpthread listing_1.1.cpp 

La compilation passe bien, mais à l'exécution j'obtiens :

terminate called after throwing an instance of 'std::system_error'
  what():  Operation not permitted
Abandon (core dumped)

A noter que sur la même machine, le même programme compilé et exécuté avec une Mageia 2, 64 bits, avec la même version 4.6.3 de gcc, ne pose aucun problème.
Une idée ?

EDIT Ce petit programme est soumis à la Boost Software Licence, version 1.0 smile

Dernière modification par incises (Le 09/06/2012, à 18:21)

Hors ligne

#2 Le 07/06/2012, à 17:13

incises

Re : Thread en C++ sous Ubuntu

Pour plus de détails, avec gdb on voit que le programme crashe ici :

(gdb) s
std::__shared_ptr<std::thread::_Impl<std::_Bind_result<void, void (*())()> >, (__gnu_cxx::_Lock_policy)2u>::__shared_ptr<std::allocator<std::thread::_Impl<std::_Bind_result<void, void (*())()> > >, std::_Bind_result<void, void (*())()> >(std::_Sp_make_shared_tag, const std::allocator<std::thread::_Impl<std::_Bind_result<void, void (*())()> > > &) (this=0x7fffffffe0e0, __tag=..., __a=...)
    at /usr/include/c++/4.6/bits/shared_ptr_base.h:992
992          _M_ptr = static_cast<_Tp*>(__p);
(gdb) s
993          __enable_shared_from_this_helper(_M_refcount, _M_ptr, _M_ptr);
(gdb) s
terminate called after throwing an instance of 'std::system_error'
  what():  Operation not permitted

Program received signal SIGABRT, Aborted.
0x00007ffff753d445 in raise () from /lib/x86_64-linux-gnu/libc.so.6

Hors ligne

#3 Le 05/07/2012, à 12:15

Dominique49

Re : Thread en C++ sous Ubuntu

J'ai encore jamais utilisé cette librairie, mais je m’apprêtais justement à l'utiliser ^^
Je ne suis encore expert dans le domaine, mais l'erreur semble indiquer une erreur interne la classe shared_ptr_base ... Je crois que cela ne viens pas de ton code mais de la façon dont tu compiles, fait attention aux options ...

De toute façon je vais essayé sous peu, alors je te dirais si j'ai réussi où non et comment wink


Maths spé - Lycée Camille Guérin

Hors ligne

#4 Le 05/07/2012, à 15:29

grim7reaper

Re : Thread en C++ sous Ubuntu

Histoire de linker

g++  -g -Wall -pedantic -std=c++0x listing_1.1.cpp -lpthread

va fonctionner.
Voir ici pour plus d‘info sur le pourquoi du comment.

Hors ligne

#5 Le 07/07/2012, à 16:15

incises

Re : Thread en C++ sous Ubuntu

Problème résolu après installation de la version 4.7.1 de GCC, grâce à ce tutoriel remarquable qui explique comment installer la dernière version stable de GCC sur une Ubuntu 12.04 :

Comment compiler la dernière version de GCC sur Ubuntu 12.04

Hors ligne