【问题标题】:Can avr-gcc use sys/socket.h?avr-gcc 可以使用 sys/socket.h 吗?
【发布时间】:2020-03-26 22:34:44
【问题描述】:

我有一个程序在我的 Raspberry Pi 上使用 gcc 编译没有问题,其中包含以下语句:

#include <sys/socket.h>

不过,我对这个项目的意图是在 Arduino 上使用它。我已经安装了 avr-gcc、avr-LibC 和 avrdude,但是当我尝试编译时使用:

avr-gcc Project.c -o Project

我收到错误消息:

fatal error: sys/socket.h: No such file or directory

我认为socket.h 是 C 标准库的一部分。是否可以安装这个库供 avr-gcc 使用,或者有没有办法可以指向这个库的目录(我自己无法在通常的文件夹中找到它,但 GCC 似乎能够找到它) ?

【问题讨论】:

  • 没有操作系统,socket.h I thought socket.h was part of the C standard library 毫无意义 - sys/socket.hposix 的一部分。 to this library's directory 但即使您“指向”它,也没有操作系统可以为系统调用提供服务。你必须自己写。
  • 许多标准库功能在 uC 中不可用。忘记 malloc 和朋友。
  • @MiCo 无用评论考虑到 2k RAM 8bit uC

标签: c sockets avr-gcc


【解决方案1】:

avr-gcc 可以使用 sys/socket.h 吗?

没有。这不可以。不过,这不是编译器的限制。这是您的代码需要在其上运行的系统的限制。

sys/*.h 标头不是 C 标准库的一部分。它们仅在兼容 POSIX 的操作系统上可用,并公开 C 函数以与操作系统交互。 sys/socket.h 标头提供与操作系统通信以创建、操作和交互套接字的函数。

由于套接字是操作系统提供的一项功能,并且您正在编译在 Arduino 微控制器上运行裸机的代码,该微控制器 没有操作系统在其上运行,因此整个目的sys/socket.h 标头无效。

这适用于与操作系统交互的任何其他类型的头文件或库函数,例如unistd.hfcntl.hpthread.h 等。事实上,avr-libc,AVR 的标准 C 库- GCC,不提供此类标头。

您需要查看the avr-libc documentation 以了解有关所提供的标头和函数及其用法的更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-15
    • 2011-02-26
    • 1970-01-01
    • 2023-03-22
    • 2015-12-21
    • 2015-12-12
    相关资源
    最近更新 更多