C11 im GCC?

Lesezeit: 4 Minuten

Benutzer-Avatar
Dervin Thunk

Ich versuche, einen C11-Code mit zu kompilieren thread.h, aber ich kann nicht. Ich habe GCC neu kompiliert (läuft jetzt mit 4.6.2), und ich versuche, damit zu kompilieren gcc -std=c1x file.c -o file. Ich kann dies in g++ tun (mit der thread Bibliothek, das heißt), aber ich kann nicht in C. Is thread.h noch nicht in der GCC-Distribution enthalten?

  • Mögliches Duplikat von Implementiert eine C-Bibliothek C11-Threads für GNU/Linux?

    – Ciro Santilli OurBigBook.com

    22. September 2018 um 4:04 Uhr

  • Für jede relativ neue Version von gcc können Sie verwenden -std=c11 statt -std=c1x.

    – Keith Thompson

    23. September 2018 um 22:23 Uhr

Benutzer-Avatar
Keith Thompson

Der Standard-C11-Header für Threading ist <threads.h>nicht <thread.h>. Siehe Abschnitt 7.26 des Entwurf N1570.

Der größte Teil der C-Standardbibliothek, einschließlich beispielsweise stdio, ist nicht in der gcc-Distribution enthalten. Stattdessen hängt gcc von der Laufzeitbibliothek ab, die vom Betriebssystem bereitgestellt wird. Dazu gehören im Allgemeinen sowohl die Header (wie <threads.h>) und dem eigentlichen Code, der die Bibliothek implementiert.

Für die meisten Linux-Systeme (oder GNU/Linux, wenn Sie es vorziehen) ist die Bibliothek glibc von GNU; für andere Systeme wird es etwas anderes sein.

Die eigentliche Frage ist also wahrscheinlich, wann glibc oder die von Ihnen verwendete C-Bibliothek die Threading-Funktionen von C11 unterstützen wird.

glibc fügt Unterstützung für C11-Threads in Version 2.28 hinzu. Ubuntu 18.04.1 LTS-System verwendet derzeit noch glibc 2.27. Auch dies gilt nur für Implementierungen, die GNU libc verwenden, nicht für alle gcc-basierten Implementierungen. Erwähnt von WorldSEnder in einem Kommentar.

UPDATE: Ubuntu 18.10 (kein LTS-Release (Long Term Support)) hat glibc 2.28, das unterstützt <threads.h>. Wie die Antwort von user2548688 zeigt, ist die Musl C-Bibliothek unterstützt <threads.h>. Unter Ubuntu können Sie die musl-dev Paket und verwenden Sie die musl-gcc Befehl.

(Beachten Sie, dass einige Teile der Bibliothek, die am engsten mit dem Compiler verbunden sind, sind von gcc selbst bereitgestellt. Die Threading-Bibliothek wahrscheinlich gehört nicht dazu, aber sicherlich ist etwas Compiler-Unterstützung erforderlich.)

  • Die meisten Linux-Systeme verwenden glibc, einige (wie das moderne Debian und seine Derivate) verwenden EGLIBC. Einige andere Systeme verwenden andere Alternativen.

    – SO stinkt

    3. April 2013 um 12:59 Uhr

  • glibc fügt Unterstützung mit Version 2.28 hinzu

    – WorldSEnder

    2. August 2018 um 21:39 Uhr

  • „Modernes Debian verwendet EGLIBC“ Zur Verdeutlichung: Debian und seine Derivate verwendeten eglibc für die Veröffentlichungen 6 und 7 (ca. 2009-2015), wechselten aber in Debian 8 zu glibc. Ab Anfang 2020 (Debian 10) verwendet Debian weiterhin glibc. Der ursprüngliche Kommentar wurde 2013 gepostet, war also damals natürlich richtig

    – fragen

    7. Januar 2020 um 19:19 Uhr


Weitere Informationen hierzu finden Sie hier.

… (Atomics – stdatomic.h – sind optional und müssen wahrscheinlich warten, bis die zugehörigen Sprachfunktionen in GCC 4.8 implementiert sind. Ich vermute, dass die optionalen Threading-Schnittstellen in threads.h und die Boundary-Checking-Schnittstellen in Annex K werden derzeit nicht für glibc benötigt, obwohl sie möglicherweise in separate Bibliotheken aufgenommen werden könnten.

Ich vermute, dass wir dies für einige Zeit nicht implementiert sehen werden, zumindest nicht in der Standard-glibc und gcc (Quellenpost bietet einen Einblick). Meine persönliche Schätzung liegt bei ungefähr einem Jahr, es wird wahrscheinlich ungefähr 2 Jahre dauern, bis es stabil genug für den Produktionseinsatz ist. Das ist 2k14 (assert (survival_2012)): P

  • 27. August 2014 (2 Jahre und 7 Monate später): keine Entwicklungspläne threads.h noch in GLIBC.

    – Peque

    27. August 2014 um 6:48 Uhr


  • Ja, scheint, dass ich mich unglücklicherweise geirrt habe (also müssen native Windows-Threads / Posix-Threads auf absehbare Zeit ausreichen). Aus irgendeinem Grund drängt niemand auf die Unterstützung portabler Threads :/

    – Tomás Pruzina

    28. August 2014 um 22:14 Uhr

  • glibc 2.28, August 2018 (in meiner Antwort erwähnt).

    – Keith Thompson

    2. August 2018 um 22:54 Uhr

Benutzer-Avatar
Irgendein Programmierer

Um aus dem GCC zu zitieren Normen Seite über C11:

GCC hat eingeschränkte unvollständige Unterstützung für Teile dieses Standards

Obwohl ich nur GCC 4.6.1 habe, habe ich nirgendwo auf meinem System eine “thread.h”-Header-Datei.

Weder die Änderungen Seiten für 4.6 Noch 4.7 erwähnt Threads.


Es gibt “Threads”, die auf der 4.7-Änderungsseite erwähnt werden, aber nichts, was irgendetwas damit in einem C11-Kontext zu tun zu haben scheint. Auch über C11 wird im Folgenden nichts erwähnt 4.8 Seite.

  • Das ist nicht ganz richtig: 4.7 erwähnt Threads. Ich bin mir nicht sicher, ob es das war, als du es gepostet hast, aber jetzt ist es auf jeden Fall so.

    – Levi Morrison

    24. Oktober 2012 um 23:58 Uhr

Musl Libc hat C11 http://www.musl-libc.org/
glibc unterstützt threads.h noch nicht

1371990cookie-checkC11 im GCC?

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

Privacy policy