2014-04-05 269 views
17

下面的代码C11 GCC threads.h not found?

#include <threads.h> 

给了我这个错误:

fatal error: threads.h: No such file or directory 

使用最新的GCC和锵与-std = C11。

C11线程不支持GCC和Clang?还是有一个黑客(或安装)来得到它?我只是使用Ubuntu 14.04与Ubuntu repo中的gcc和clang包。

+3

完全支持c11和/或threads.h的编译器数量是负数。 :( – this

+2

C11线程最终受到支持时,将由C *库*支持,而不是编译器本身。至少有两个人在谈论如何在今年夏天将glibc作为GSoC项目实现C11线程,同时,你可能会发现'pthread.h' API可疑地类似,尽管它的名字更长。 – zwol

+0

在RHEL中,没有'threads.h'但是有'pthread.h'。在solaris中有'thread.h '。 – alvits

回答

15

gcc文件C11 status表明,它不支持线程,它说:

Threading [Optional] | Library issue (not implemented)

由于这份文件表明,这是不是一个真正的gccclang问题,而是glibc问题。正如Zack指出,它看起来像there may be work under way soonglibc得到支持,但现在不会帮助你。 在此期间您可以使用this

+0

谢谢。那么GCC和Clang都不支持C11线程呢?我将不得不退回到POSIX线程,然后:-( – lucasart

+0

@lucasart看起来是这种情况 –

+1

我希望我昨天已经读过这个[用于''glibc'线程的Bugzilla](https://sourceware.org/bugzilla /show_bug.cgi?id=14092)仍然开放(2年以上)。@lucasart:POSIX线程似乎不是回归;几乎相同的界面,“便携”,*和*实施。 :)事实上,编译针对['glibc' 2.19](http://www.gnu.org/software/libc/libc.html)报告'__STDC_NO_THREADS__'是'1'。另请参阅[this SO](http://stackoverflow.com/questions/8859394/c11-thread-h-in-gcc)了解更多链接。 pthreads它是(或C++ 11的'std ::线程,这顺便说一句取决于'-pthread' ...)。 –

1

虽然C11线程尚未实现,但C++ 11线程已经实现并且它们具有相似的功能。当然,C++ 11可能是一个不可接受的解决方案,在这种情况下,关于POSIX线程的先前评论是您最大的希望。

1

Musl支持C11 <threads.h>

在Debian中安装musl-tools,然后用musl-gcc进行编译。我正在用Musl而不是Glibc引导Debian。

另请参阅this

+0

在Ubuntu中,链接头文件* c11threads.h *会导致一堆错误,例如'PTHREAD_MUTEX_TIMED_NP'未声明。搜索说它应该在包含的'pthreads.h'中,但似乎不是。 –

+1

@Hi -Angel您需要使用-std = gnu11编译器标志而不是-std = c11,或者在包含该c11threads.h文件之前需要使用#define _GNU_SOURCE。 – nos