2016-02-13 35 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。在其他发行版中,您可能会发现一个已准备好应用的软件包,或者您可以自己编译这个软件包。