2012-01-14 130 views
26

我想编译一些C11代码,使用thread.h,但我不能。我已经重新编译了GCC(现在运行4.6.2),并且正在尝试编译gcc -std=c1x file.c -o file。我可以在g ++中执行此操作(使用thread库),但我不能在C中。是否还包含thread.h未包含在GCC发行版中?C11 <thread.h>在GCC?

回答

36

穿线标准C11头是<threads.h>,不<thread.h>。请参阅N1570 draft的第7.26节。

大多数C标准库(包括stdio)都不包含在gcc发行版中。相反,gcc依赖于操作系统提供的任何运行时库。这通常包括标题(如<threads.h>)和实现该库的实际代码。

对于大多数Linux系统(或GNU/Linux,如果您愿意的话),该库是GNU的glibc;对于其他系统,它将是别的东西。

所以真正的问题可能是,当你使用的glibc,或任何C库,将支持C11的线程功能。

(注:库的几个部分,那些最密切相关的编译器,是由GCC本身提供。线程库可能是不是其中之一,但肯定需要一定的编译器支持)

+1

大多数Linux系统使用glibc,有些(如现代的Debian及其衍生产品)使用EGLIBC。其他一些系统使用其他替代品。 – 2013-04-03 12:59:47

6

要从GCC​​报价约C11:

GCC已经限制了本标准

部分不完整的支持,虽然我只有GCC 4.6.1,我没有“ thread.h“头文件在我的系统上的任何地方。

4.64.7的更改页面都没有提及线程。


4.7更改页面中提到了“线程”,但在C11上下文中似乎没有任何与它有关的内容。另外,在上传的4.8页面中没有提及C11。

+4

这是不完全正确:4.7确实提到线程。我不知道你是否在发布时确实如此,但现在确实如此。 – 2012-10-24 23:58:41

9

关于此的更多信息可以在here找到。

... (原子能 - stdatomic.h - 是可选的,可能需要等待 关联的语言功能在GCC 4.8中实现我猜 在线程的线程可选接口h和边界检查在附件K 接口不是通缉的glibc就目前而言,虽然可以 可能在不同的图书馆去。

我的猜测是,我们将不会看到此实施了相当长的一段时间,至少不是在标准的glibc和gcc(源文章提供了一些见解)个人猜测大概是一年,但它可能需要2年左右的时间,直到它足够稳定以供生产使用。那2k14(断言(survival_2012)):P

+1

2014年8月27日(2年7个月之后):还没有计划在GLIBC中开发'threads.h'。 – Peque 2014-08-27 06:48:36

+0

是的,似乎我错了不幸(因此原生windows线程/ posix线程必须为可预见的未来做)。 由于某种原因,没有人推动可移植线程的支持:/ – AoeAoe 2014-08-28 22:14:10

+1

我希望你对你的预测是正确的... – Peque 2014-08-29 07:23:04