2016-02-13 87 views
0

我想爲我的Raspberry Pi編譯一個非常程序,它使用c11標準庫中頭文件中定義的thrd_sleep()函數。我想使用C11庫來實現跨平臺兼容性。如何獲得GCC Raspbian上的C11頭文件?

A google search我以前的確讓我相信更新gcc應該更新可用的頭文件,因爲它沒有提到任何其他命令。由於各種原因,我沒有更改軟件包源。我已經安裝了最新版本的gcc:gcc-4,6,gcc-4.7和gcc-4.8。我已經嘗試了所有的命令:

gcc main.c 

gcc-4.6 main.c 

gcc-4.7 main.c 

gcc-4.8 main.c 

,每次我得到了同樣的錯誤:

main.c:2:21: fatal error: threads.h: No such file or directory 

它現在很明顯,我需要其他人安裝的東西。我的其他搜索沒有得出任何結論。

  1. 什麼包包括C11頭

  2. 我一定要鏈接任何庫包括C11線程支持的功能?

回答

0

C11線程尚未由GCC執行,see this。不幸的是,C11線程仍然是「新的」,因此目前它們幾乎不受任何編譯器的支持。 (使用它們進行跨平臺開發並不是一個好主意)。

POSIX線程是目前唯一可移植的線程庫。

+0

AFAIK不是GCC,但glibc需要實現C11線程。 C11線程只需要庫支持,因爲線程本地存儲或原子操作等其他功能需要編譯器支持。請參閱Keith Thompsons answere [here](http://stackoverflow.com/a/8860111/5444148) – fsasm

0

對於我在Raspberry Pi上做的C++項目,我使用了pthreads。這裏是我的make命令:

g++ -o video7 -lpthread -lrt video7.cpp stackstring.cpp playvideo.cpp dirlist.cpp cpuinfo.cpp faststring.cpp liststring.cpp remoteupdate.cpp kbhit.cpp randomnumber.cpp blowfish.cpp base85.cpp 

我包括

#include <pthread.h> 

我創建一個線程這樣的並行線程。

pthread_t updateThread; 
char *param = strdup("Sample"); 
pthread_create(&updateThread,NULL, UpdateThreadProc, param); 

void *UpdateThreadProc(void *parameters) 
{ 
    // Do work. 
    pthread_exit(NULL); 
} 
+0

對於跨平臺兼容性,我希望儘可能使用標準C.這樣我就可以在Windows和Linux上對代碼進行最小限度的更改,而無需在Windows機器上運行cygwin。我很欣賞你的答案,而且我會按照你的建議學習和使用pthread,直到我可以在linux上更新C頭文件。 – user2350838

+0

對於Raspberry Pi,我最近轉向使用C#與Mono並取得了良好的效果。我使用System.Windows.Forms作爲gui。或者對於終端程序,我使用了Console.Write。可執行文件可以移動到Windows PC而不需要重新編譯。 –

0

線程函數通常不是編譯器發佈的一部分,但C庫的一部分,所以你必須要找到一個實現C11螺紋接口。關閉開源庫,我只知道實現此接口的musl。有一些Linux發行版使用這個C庫作爲他們的主庫,例如Alpine。在其他發行版中,您可能會發現一個已準備好應用的軟件包,或者您可以自己編譯這個軟件包。