C11 en GCC?


Estoy tratando de compilar algún código de C11 usando thread.h, pero no puedo. He recompilado GCC (ejecutando 4.6.2 ahora), y estoy tratando de compilar con gcc -std=c1x file.c -o file. Puedo hacer esto en g++ (usando la biblioteca thread, es decir) pero no puedo en C. ¿No está thread.h incluido en la distribución GCC todavía?

 27
Author: Greg Bacon, 2012-01-14

4 answers

El encabezado C11 estándar para enhebrar es <threads.h>, no <thread.h>. Véase la sección 7.26 del proyecto N1570.

La mayor parte de la biblioteca estándar de C, incluyendo stdio por ejemplo, no está incluida en la distribución gcc. En su lugar, gcc depende de cualquier biblioteca de tiempo de ejecución proporcionada por el sistema operativo. Eso generalmente incluye tanto los encabezados (como <threads.h>) como el código real que implementa la biblioteca.

Para la mayoría de los sistemas Linux (o GNU / Linux si lo prefiere), la biblioteca es GLIBC de GNU; para otros sistemas será otra cosa.

Así que la verdadera pregunta es probablemente cuándo glibc, o cualquier biblioteca de C que esté utilizando, soportará las funciones de subproceso de C11.

Glibc añade soporte para hilos C11 en la versión 2.28 . Ubuntu 18.04.1 sistema LTS actualmente todavía utiliza glibc 2.27. Una vez más, esto se aplica solo a las implementaciones que utilizan GNU libc, no a todas las implementaciones basadas en gcc. Mencionado por WorldSEnder en un comentario.

(Tenga en cuenta que algunas partes de la biblioteca, las más estrechamente vinculadas al compilador, son proporcionadas por el propio gcc. La biblioteca de subprocesos probablemente no es una de ellas, pero ciertamente se requiere algún soporte de compilador.)

 38
Author: Keith Thompson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-23 22:23:05

Puede encontrar más información al respecto aquí.

... (Atomics-stdatomic.h - son opcionales, y probablemente tendrá que esperar características de lenguaje asociadas que se implementarán en GCC 4.8. Supongo que las interfaces de roscado opcionales en threads.h y límites-comprobación las interfaces en el anexo K no se quieren para glibc por ahora, aunque podrían potencialmente ir en bibliotecas separadas.

Mi conjetura es que no veremos esto implementado durante bastante tiempo, al menos no en el estándar glibc y gcc (la publicación de fuentes proporciona cierta información). Mi conjetura personal es algo así como un año, tomará probablemente algo así como 2 años hasta que sea bastante estable para el uso de la producción. Eso es 2k14 (assert (survival_2012)): P

 9
Author: AoeAoe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-22 19:42:39

Para citar de la página de estándares del GCC sobre C11:

GCC tiene soporte incompleto limitado para partes de este estándar

Aunque solo tengo GCC 4.6.1, no tengo un "hilo".h " archivo de cabecera en cualquier lugar de mi sistema.

Ni las páginas de cambios para 4.6 nor 4.7 menciona temas.


Hay "hilos" mencionados en la página de cambios 4.7, pero nada que parezca tener algo que ver con esto en un contexto C11. También, nada sobre C11 se menciona en el upcomming 4.8 page.

 6
Author: Some programmer dude,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-29 04:55:54

Musl libc tiene C11 http://www.musl-libc.org / glibc no se conecta.h soporte todavía

 2
Author: user2548688,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-02-12 15:06:04