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
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 .)
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.
Esto no es del todo cierto: 4,7 menciona hilos. No estoy seguro de si lo hizo cuando publicó, pero ciertamente sí ahora. –
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
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
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
Me gustaría que haya tenido razón sobre su predicción ... – Peque
MUSL libc tiene C11 http://www.musl-libc.org/ glibc no threads.h apoyo aún
- 1. Últimos cambios en C11
- 2. C11 anonymous structs via typedefs?
- 3. C11/C++ 11 Memoria Modelo
- 4. Compiladores compatibles con C11
- 5. Redefinición de typedef es una característica C11
- 6. P99 y C99 frente a C11
- 7. ¿Cómo uso un prefijo binario de acuerdo con C11?
- 8. vinculando <iostream.h> en Linux usando gcc
- 9. Vida útil de los objetos temporales en C11 vs C99
- 10. Sintaxis y uso de muestra de _Generic en C11
- 11. Un error en la aplicación GCC de campos de bits
- 12. alineado malloc() en GCC?
- 13. strlen() implementación en gcc
- 14. __uint128_t en mingw gcc
- 15. Actualizar GCC en OSX
- 16. ejecutando gcc en cygwin
- 17. Contador atómico en gcc
- 18. ¿Ilvm-gcc y clang binary son compatibles con gcc? - particularmente mingw gcc en Windows
- 19. ¿Hay alguna manera de hacer entradas de 128 bits en gcc <4.4
- 20. arm-linux-gcc vs arm-elf-gcc
- 21. operador sobrecargado << en problemas de concatenación ofstream
- 22. GCC hotpatching?
- 23. GCC preprocesador
- 24. GCC ignorado
- 25. En PHP, ¿qué representa "<<<"?
- 26. desactivar advertencias específicas en gcc
- 27. ¿Ensamblaje de llamadas en GCC?
- 28. ¿Cómo usar OpenSSL en GCC?
- 29. GCC vs Greenhills en ARM
- 30. Cuádruple precisión en C++ (GCC)
La mayoría de los sistemas Linux usan glibc, algunos (como Debian moderno y sus derivados) usan EGLIBC. Algunos otros sistemas usan otras alternativas. –