2012-01-14 6 views
26

Estoy intentando compilar algún código 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), pero no puedo en C. ¿Todavía no se ha incluido thread.h en la distribución de GCC?C11 <thread.h> en GCC?

Respuesta

36

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

La mayor parte de la biblioteca estándar C, incluido stdio, por ejemplo, no se incluye en la distribución gcc. En cambio, gcc depende de la biblioteca de tiempo de ejecución que proporcione 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.

Por lo tanto, la verdadera pregunta es probablemente cuando glibc, o la biblioteca C que esté utilizando, sea compatible con las características de enhebrado de C11.

(Tenga en cuenta que algunas partes de la biblioteca, los más estrechamente relacionados con el compilador, son proporcionada por gcc sí mismo. La librería de hilos probablemente no es uno de ellos, pero ciertamente se requiere algún apoyo compilador .)

+1

La mayoría de los sistemas Linux usan glibc, algunos (como Debian moderno y sus derivados) usan EGLIBC. Algunos otros sistemas usan otras alternativas. –

6

citar el CCG standards page sobre C11:

GCC ha limitado el apoyo incompleto de piezas de esta norma

Mientras que sólo tienen GCC 4.6.1, que no tienen un " archivo de encabezado thread.h "en cualquier lugar de mi sistema.

Ni las páginas de cambios para 4.6 ni 4.7 mencionan los hilos.


Hay "hilos" que se mencionan en la página 4.7 cambios, pero nada que no parece tener nada que ver con ello en un contexto C11. Además, nada sobre C11 se menciona en la próxima página 4.8.

+4

Esto no es del todo cierto: 4,7 menciona hilos. No estoy seguro de si lo hizo cuando publicó, pero ciertamente sí ahora. –

9

Más información sobre esto puede encontrarse en here.

... (Atomics - stdatomic.h -. Son opcionales, y es probable que tenga que esperar a que características de lenguaje asociados a implementar en GCC 4.8 supongo que las interfaces de roscado opcionales en las discusiones .h y los límites de comprobación de interfaces en el anexo K no son buscados por glibc por ahora, aunque podrían potencialmente ir en las bibliotecas independientes.

Mi conjetura es que no vamos a ver esto en práctica desde hace bastante tiempo, al menos no en glibc estándar y gcc (publicación de origen proporciona alguna información). Mi la suposición personal es algo así como un año, tomará probablemente algo así como 2 años hasta que sea lo suficientemente estable para el uso de producción.Thats 2k14 (afirmar (survival_2012)): P

+1

27 de agosto de 2014 (2 años y 7 meses después): no hay planes para desarrollar 'threads.h' en GLIBC todavía. – Peque

+0

Sí, parece que me equivoqué desafortunadamente (por lo que los hilos de Windows nativos/subprocesos posix tienen que ver en el futuro previsible). Por alguna razón, nadie está presionando para que se admitan los hilos portátiles:/ – AoeAoe

+1

Me gustaría que haya tenido razón sobre su predicción ... – Peque