C11 GCC threads.h nicht gefunden?

Lesezeit: 4 Minuten

Benutzer-Avatar
lucasart

Der folgende Code

#include <threads.h>

Gibt mir diesen Fehler:

fatal error: threads.h: No such file or directory

Verwenden des neuesten GCC und Clang mit -std=c11.

Wird C11-Threading von GCC und Clang nicht unterstützt? Oder gibt es einen Hack (oder etwas zu installieren), um es zu bekommen? Ich verwende nur Ubuntu 14.04 mit den Paketen gcc und clang aus dem Ubuntu-Repo.

  • Die Anzahl der Compiler, die c11 und/oder threads.h vollständig unterstützen, ist negativ. 🙁

    – Dies

    5. April 2014 um 1:34 Uhr

  • C11-Threads werden, wenn sie schließlich unterstützt werden, von C Bibliothek und nicht der eigentliche Compiler. Mindestens zwei Leute sprechen darüber, diesen Sommer C11-Threads für glibc als GSoC-Projekt zu implementieren. In der Zwischenzeit finden Sie ggf pthread.h API verdächtig ähnlich, wenn auch mit viel längeren Namen für alles.

    – zol

    5. April 2014 um 1:40 Uhr


  • Ein Großteil der Standardisierung „segnet“ bestehende, weit verbreitete Erweiterungen, die als gute Idee angesehen werden, aber die Erfahrung zeigt, dass die Vorlaufzeit zwischen dem Erscheinen eines neuen Features im C-Standard und der tatsächlichen umfassenden Implementierung durch Compiler/Bibliotheken eher „10 Jahre bis nie“ als „bis zu 3 Jahre“.

    – Emmett

    5. April 2014 um 1:58 Uhr

  • @ Emmet /me schiebt dir wortlos die Whiskyflasche die Bar hinunter

    – zol

    5. April 2014 um 2:14 Uhr


  • Siehe auch Implementiert eine C-Bibliothek C11-Threads für GNU/Linux?

    – Keith Thompson

    8. Januar 2016 um 1:49 Uhr

Benutzer-Avatar
Shafik Yaghmur

Das gcc dokumentieren C11-Status zeigt an, dass Threading nicht unterstützt wird, heißt es:

Einfädeln [Optional] | Bibliotheksproblem (nicht implementiert)

Wie das Dokument zeigt, ist dies nicht wirklich eine gcc oder clang Problem aber glibc Ausgabe. Wie Zack darauf hingewiesen hat, sieht es so aus möglicherweise wird bald daran gearbeitet dafür Unterstützung zu bekommen glibc aber das hilft dir jetzt nicht weiter. Sie können verwenden Dies in der Zwischenzeit.

Behoben für glibc 2.28

Laut der Fehler 14092 – Unterstützung von C11-Threads dies wurde in glibc 2.28 behoben:

Upstream umgesetzt durch:

9d0a979 Manuelle Dokumentation für threads.h hinzugefügt
0a07288 nptl: Testfälle für ISO C11-Threads hinzugefügt
c6dd669 nptl: Abilist-Symbole für C11-Threads hinzugefügt
78d4013 nptl: C11-Threads tss_*-Funktionen hinzufügen
918311a nptl: cnd_*-Funktionen für C11-Threads hinzugefügt
3c20a67 nptl: Call_once-Funktionen für C11-Threads hinzugefügt
18d59c1 nptl: C11-Threads mtx_*-Funktionen hinzufügen
ce7528f nptl: thrd_*-Funktionen für C11-Threads hinzufügen

Es wird in 2.28 enthalten sein.

  • Vielen Dank. Also unterstützen weder GCC noch Clang C11-Threading? Ich muss dann auf POSIX-Threads zurückgreifen 🙁

    – Lukasart

    5. April 2014 um 1:50 Uhr

  • @lucasart scheint der Fall zu sein

    – Shafik Yaghmour

    5. April 2014 um 1:55 Uhr

  • Ich wünschte, ich hätte das gestern gelesen. Der Bugzilla zum Einfädeln glibc ist noch offen (2+ Jahre). @lucasart: POSIX-Threads scheinen kaum eine Regression zu sein; nahezu identische Oberfläche, “tragbar”, und umgesetzt. 🙂 Tatsächlich kompilieren dagegen glibc 2.19 Berichte __STDC_NO_THREADS__ ist 1. Siehe auch diese SO für weitere Links. pthreads ist es (oder C++11 std::threadwas übrigens davon abhängt -pthread…).

    – hoc_age

    2. Juli 2014 um 15:17 Uhr

  • Anscheinend etwas Bewegung auf der glibc-Seite

    – Shafik Yaghmour

    29. Juni 2015 um 14:30 Uhr

  • ich kann #include <threads.h> jetzt mit Glibc 2.31 (Ubuntu 20.04)

    – Antti Haapala – Слава Україні

    17. Januar 2021 um 10:05 Uhr


Benutzer-Avatar
Benutzer2548688

Musl C11 unterstützen <threads.h>.

In der Debian-Installation musl-toolsund dann mit kompilieren musl-gcc. Ich arbeite daran, Debian mit Musl anstelle von Glibc zu booten.

Siehe auch Dies.

  • In Ubuntu der verlinkte Header c11threads.h verursacht eine Reihe von Fehlern. Z.B PTHREAD_MUTEX_TIMED_NP nicht deklariert sein. Die Suche sagt, dass es im Lieferumfang enthalten sein sollte pthreads.haber es scheint nicht.

    – Hallo Engel

    6. Juli 2015 um 4:47 Uhr

  • @Hi-Angel Sie müssen entweder das Compiler-Flag -std=gnu11 anstelle von -std=c11 verwenden oder Sie müssen ein #define _GNU_SOURCE verwenden, bevor Sie diese c11threads.h-Datei einschließen.

    – Nr

    15. Januar 2016 um 10:29 Uhr


  • Funktioniert auf Debian 9.13 Sonntag, 28. Februar 2021.

    – zkutch

    28. Februar 2021 um 4:49 Uhr

Benutzer-Avatar
Jeff Hammond

Während C11-Threads noch nicht implementiert wurden, wurden C++11-Threads implementiert und sie haben eine ähnliche Funktionalität. Natürlich kann C++11 eine inakzeptable Lösung sein, in diesem Fall sind die vorherigen Kommentare zu POSIX-Threads Ihre beste Hoffnung.

Threads wurden in die Mainline-Glibc gemergt und sind beispielsweise auf meinem Ubuntu 20.04 verfügbar. Leider scheine ich keine Handbuchseiten für die Funktion zu haben. Aber das funktioniert:

#include <threads.h>
#include <stdio.h>

int hello_from_threading(void *arg) {
    printf("Thread about to take a nap...\n");
    thrd_sleep(&(struct timespec) { .tv_sec = 3 }, NULL);
    printf("Woke up from 3 second slumber\n");
    return 42;
}

int main(void) {
    thrd_t thread;
    thrd_create(&thread, hello_from_threading, NULL);
    int res;
    printf("A thread was started\n");
    thrd_join(thread, &res);
    printf("Thread ended, returning %d\n", res);
}

und teste es:

% gcc threading.c -o threading -lpthread
% ./threading
A thread was started
Thread about to take a nap...
Woke up from 3 second slumber
Thread ended, returning 42

1370810cookie-checkC11 GCC threads.h nicht gefunden?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy