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?
C11 im GCC?
Dervin Thunk
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
-
-
„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
-
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
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