【问题标题】:How can I Get the C11 Headers on GCC, Raspbian?如何在 GCC、Raspbian 上获取 C11 标头?
【发布时间】:2016-02-13 05:27:08
【问题描述】:

我想为我的 Raspberry Pi 编译一个非常程序,它使用 c11 标准库的头文件中定义的 thrd_sleep() 函数。我想使用 C11 库实现跨平台兼容性。

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 线程支持功能?

【问题讨论】:

    标签: gcc header-files raspbian apt-get c11


    【解决方案1】:

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

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

    【讨论】:

    • AFAIK 不是 GCC 但 glibc 需要实现 C11 线程。 C11 线程只需要库支持,因为线程本地存储或原子操作等其他功能需要编译器支持。请参阅 Keith Thompson 的回答 here
    【解决方案2】:

    对于我在 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
    

    我将 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。这样我就可以在 windows 和 linux 上以最小的更改编译代码,而无需 windows 机器上的 cygwin。不过我很感谢你的回答,我会按照你的建议学习和使用 pthread,直到我可以在 linux 上更新 C 头文件。
    • 对于 Raspberry Pi,我最近改用 C# 和 Mono 并取得了不错的效果。我使用 System.Windows.Forms 作为 gui。或者对于终端程序,我使用了 Console.Write。可执行文件无需重新编译即可移动到 Windows PC。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-13
      • 1970-01-01
      • 1970-01-01
      • 2022-08-02
      • 2012-02-23
      • 1970-01-01
      相关资源
      最近更新 更多