J'ai le code le plus simple qui soit:
#include <iostream>
#include <thread>
void worker()
{
std::cout << "another thread";
}
int main()
{
std::thread t(worker);
std::cout << "main thread" << std::endl;
t.join();
return 0;
}
bien que je ne puisse toujours pas le compiler avec g++
pour l'exécuter.
Plus de détails:
$ g++ --version
g++ (Ubuntu/Linaro 4.8.1-10ubuntu8) 4.8.1
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Commande à compiler:
$ g++ main.cpp -o main.out -pthread -std=c++11
Fonctionnement:
$ ./main.out
terminate called after throwing an instance of 'std::system_error'
what(): Enable multithreading to use std::thread: Operation not permitted
Aborted (core dumped)
Et maintenant je suis coincé. Dans chaque fil lié sur Internet, il est recommandé d'ajouter -pthread
pendant que je l'ai déjà.
Qu'est-ce que je fais mal?
PS: C'est une toute nouvelle installation ubuntu 13.10. Seul le g++
package a été installé et des choses mineures comme chromium
etc.
PPS:
$ ldd ./a.out
linux-vdso.so.1 => (0x00007fff29fc1000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fb85397d000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fb853767000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fb85339e000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fb85309a000)
/lib64/ld-linux-x86-64.so.2 (0x00007fb853c96000)
PPPS: avec clang++
(v3.2) il se compile et fonctionne correctement
PPPPS: les gars, ce n'est pas un double de Quelles sont les bonnes options de lien pour utiliser std :: thread dans GCC sous Linux?
PPPPPS:
$ dpkg --get-selections | grep 'libc.*dev'
libc-dev-bin install
libc6-dev:amd64 install
libclang-common-dev install
linux-libc-dev:amd64 install
libpthread-2.17.so
dans le même répertoire.Réponses:
La réponse a été fournie par un membre aimable du chat SO C ++ .
Il semble que ce comportement soit causé par un bogue dans gcc.
La solution de contournement fournie dans le dernier commentaire de cette discussion de bogue fait travail et résout le problème:
la source
-pthread -lpthread -Wl,--no-as-needed
drapeaux pour obtenir ce travail.L'ajout a
-lpthread
résolu le problème identique pour moi:la source
-lpthread
. Vous pourriez avoir besoin-pthread -Wl,--no-as-needed
, selon la version du compilateur. gcc-4.8.2 en a besoin.J'ai une version légèrement plus avancée (4.8.4 au lieu de 4.8.1), et j'ai testé les trois réponses ci-dessus. En réalité:
-pthread
seul fonctionne:-Wl,--no-as-needed
seul ne fonctionne pas .-lpthread
seul ne fonctionne pas .-Wl,--no-as-needed
et travailler-lpthread
ensemble :Ma version est "g ++ (Ubuntu 4.8.4-2ubuntu1 ~ 14.04.1) 4.8.4".
la source
la réponse a déjà été faite pour qtcreator:
pour console g ++: ici
la source