2012-01-14 138 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