【问题标题】:How to link standard library to a cross-compiler?如何将标准库链接到交叉编译器?
【发布时间】:2018-07-11 04:24:00
【问题描述】:

我想在 macOS 上构建 xv6,所以我从 a Homebrew Tap 安装了交叉编译器工具链 i386-elf-gcc 和 i386-elf-gcc。

问题是 i386-elf-gcc 在编译时无法链接标准库。我在一个简单的c文件上进行了测试,得到了以下错误。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) {
    printf("d\n");
    return 0;
}

错误:

> i386-elf-gcc --sysroot=usr/includes test.c
test.c:1:10: fatal error: stdio.h: No such file or directory
 #include <stdio.h>
          ^~~~~~~~~
compilation terminated.

【问题讨论】:

  • 看起来像一个错误的安装。 (交叉)编译器附带标准库和头文件
  • “问题是 i386-elf-gcc 无法链接标准库” --> 不完全是。到目前为止,这不是 链接 问题,但是编译器对标准头文件所在的位置感到困惑。
  • @EugeneSh。你认为这可能是由自制水龙头中的这个option 引起的吗?
  • @chux 我在这个 gcc 中添加了一个--sysroot=usr/includes 选项,但它并没有真正的帮助。
  • 好吧。不。这个选项告诉当 building gcc 时不要使用任何目标头文件。你能找到工具链路径中的标题吗?

标签: c gcc cross-compiling xv6


【解决方案1】:

要解决这个问题,您可以尝试添加 newlib 库并将其交叉编译到您的架构中。下面的链接说免费的newlib可以作为stdlib的源来自己编译。

One problem is that the standard libraries provided with most software development tool suites arrive only in object form...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-09
    • 1970-01-01
    相关资源
    最近更新 更多