【问题标题】:Compile Error : arm-none-eabi-gcc missing /usr/include编译错误:arm-none-eabi-gcc 缺少 /usr/include
【发布时间】:2022-03-03 18:23:31
【问题描述】:

我正在用 Ubuntu 的 HAT 为树莓派 pico 开发一个程序。 我将 arm-none-eabi-gcc 与 cmake 一起使用。 我想包含 sys/socket.h 用于 tcp/ip 套接字编程

来自命令:$ echo | arm-none-eabi-gcc -v -x c -E -, 我明白了

/usr/lib/gcc/arm-none-eabi/6.3.1/include

/usr/lib/gcc/arm-none-eabi/6.3.1/include-fixed

/usr/lib/gcc/arm-none-eabi/6.3.1/../../../arm-none-eabi/include

因此当我尝试编译 .c 文件时没有得到这样的文件或目录 用#include

我想包含 /usr/include 及其包含 socket.h 文件的子目录。

如何在编译时添加 /usr/include。 我还应该将 newlib 用于 pico 机器吗?

【问题讨论】:

  • gcc ... -I -L
  • 我不明白...你是在做裸机开发还是Linux开发?我以为 Pico 是一个微控制器?
  • 我先在linux机器上开发并编译.c文件。当前工具链将 .c 编译为 .uf2 文件。然后我将 .uf2 文件拖放到你所说的微控制器上。 @Lundin
  • @simony1124 但是,您究竟是如何将 TCP/IP 堆栈和 Linux 套接字放入微控制器的呢?
  • 您需要使用目标上存在的任何套接字库,就这么简单。除非有人决定在目标的某个 TCP/IP 堆栈之上将其实现为 HAL,否则没有理由可以使用 sys/socket。

标签: c++ c linux gcc


【解决方案1】:
  1. arm-none-eabi-gcc 的版本太旧了;
  2. 云使用默认路径,试图修改'makefile'中的路径:e.g.:a) b)
  3. libs 云丢失,试图使用“sudo apt install”来解决问题。

【讨论】:

  • a) OP 没有使用“makefile”,b) <linux/socket.h> 不应该直接使用,因为它不是官方 C api 的一部分(例如参见 here)和 c ) sudo apt install 将 - 就像你要求它做的那样 - 什么都不安装。
  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
【解决方案2】:

如果您想使用套接字等操作系统功能,则不能使用gcc-arm-none-eabi 工具链。该工具链只能用于嵌入式代码,在没有操作系统支持的情况下运行,因此不提供操作系统头文件。我建议您使用直接安装在树莓派上的常规 gcc 编译代码,而不是尝试交叉编译。正确的交叉编译工具链是一门高级学科,设置起来很困难。

编辑
如果您真的想要或需要使用交叉编译器(在 Ubuntu 机器上编译而不是直接在 pi 上编译),您可能会发现 this question 及其答案很有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-30
    • 2017-03-24
    • 1970-01-01
    • 1970-01-01
    • 2019-06-19
    相关资源
    最近更新 更多