如何在 GCC Raspbian 上获得 C11 Headers?

How can I Get the C11 Headers on GCC, Raspbian?

我想为我的 Raspberry Pi 编译一个程序,它使用 c11 标准库的 header 文件中定义的 thrd_sleep() 函数。我想使用 C11 库实现 cross-platform 兼容性。

A google search 我以前确实让我相信更新 gcc 应该更新可用的 headers 因为它没有提到任何其他命令。由于各种原因,我没有更改包源。我已经安装了 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包含什么包headers

  2. 我是否必须 link 任何库来包含 C11 线程支持功能?

对于我在 Raspberry Pi 上做的 C++ 项目,我使用的是 pthreads。这是我的制作命令:

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

我在

中包含了 pthread
#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);
}

线程函数通常不是编译器分发的一部分,而是 C 库的一部分,因此您必须找到一个实现 C11 线程接口的函数。在开源库中,我只知道 musl 实现了这个接口。有一些 Linux 发行版使用这个 C 库作为它们的主要库,例如 Alpine。在其他发行版上,您可能会找到一个可以应用的包,或者您可以自己编译 musl

GCC 尚未实现 C11 线程,see this。不幸的是,C11 线程仍然是 "new",因此目前几乎没有任何编译器支持它们。使用它们进行跨平台开发并不是一个好主意(目前)。

POSIXthreads 是目前唯一的可移植线程库。