[英]C11 <thread.h> in GCC?
我正在尝试使用thread.h
编译一些C11代码,但我不能。 我已经重新编译了GCC(现在运行4.6.2),我正在尝试使用gcc -std=c1x file.c -o file
进行编译。 我可以用g ++(使用thread
库)来做到这一点,但我不能在C中。是否thread.h
没有包含在GCC发行版中的thread.h
?
用于线程的标准C11头是<threads.h>
,而不是<thread.h>
。 见N1570草案第7.26节。
大多数C标准库(例如stdio)都不包含在gcc发行版中。 相反,gcc依赖于操作系统提供的任何运行时库。 这通常包括头文件(如<threads.h>
)和实现库的实际代码。
对于大多数Linux系统(如果你愿意,还是GNU / Linux),库是GNU的glibc; 对于其他系统,它将是另一回事。
所以真正的问题可能是glibc,或者你正在使用的C库,都支持C11的线程功能。
glibc在版本2.28中添加了对C11线程的支持 。 Ubuntu 18.04.1 LTS系统目前仍使用glibc 2.27。 同样,这仅适用于使用GNU libc的实现,而不适用于所有基于gcc的实现。 WorldSEnder在评论中提到过。
更新:Ubuntu 18.10(不是LTS(长期支持)版本)有glibc 2.28,它支持<threads.h>
。 另外,正如user2548688的回答所指出的那样, musl C库支持<threads.h>
。 在Ubuntu上,您可以安装musl-dev
包并使用musl-gcc
命令。
(注意,库中的一些部分,与编译器关系最密切的部分, 是由gcc本身提供的。线程库可能不是其中之一,但肯定需要一些编译器支持。)
有关这方面的更多信息,请点击此处 。
...(Atomics - stdatomic.h - 是可选的,可能需要等待在GCC 4.8中实现相关的语言功能。我猜测附件中的threads.h和bounds-checking接口中的可选线程接口K现在不想用于glibc,尽管它们可能会进入单独的库中。
我的猜测是我们不会在相当长的一段时间内看到这个,至少在标准的glibc和gcc中没有实现(源文章提供了一些见解)。 我的个人猜测就像一年,大概需要两年时间,直到它足够稳定以供生产使用。 多数民众赞成2k14(断言(生存_2012)):P
musl libc有C11 http://www.musl-libc.org/ glibc还没有threads.h支持
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.