2014-04-05 297 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