【问题标题】:autotools: C compiler cannot create executablesautotools:C 编译器无法创建可执行文件
【发布时间】:2012-04-12 14:16:02
【问题描述】:

我正在 OS X 上构建 x86_64-elf 内核。我的构建系统是 autotools。我成功编译 gcc 以在 OS X 上为 x86_64-elf 进行交叉编译。当我运行从 autotools 生成的配置脚本时,我遇到了一个问题:

configure: error: C compiler cannot create executables
See `config.log' for more details

所以我查看 config.log 并查看:

cannot find crt0.o: No such file or directory
collect2: error: ld returned 1 exit status

这很有意义。交叉编译器不会生成可执行文件,因为没有关联的运行时。但我不需要或不希望我的编译器生成可执行文件,我将为我的引导加载程序适当地链接它。我如何告诉 autotools 不要检查这个?

【问题讨论】:

  • 你不能在configure.ac 脚本中设置CC 变量吗?但是它可能不起作用,因为其他测试可能会创建脚本尝试运行的可执行文件。
  • 我在运行configure时设置了CC变量,在configure.ac中设置它真的很糟糕。无论如何,这并不能回答我如何让它停止检查编译器是否可以创建可执行文件的问题。
  • 告诉 configure 你正在交叉编译。使用./configure --host=x86_64-unknown-linux。如果构建类型与主机类型不同,则可能会跳过某些测试。
  • 我正在这样做,--host=x86_64-elf,它仍然失败。

标签: cross-compiling autotools osdev


【解决方案1】:

确保在运行配置脚本时指定以下 gcc 标志(将它们添加到 CFLAGS 环境变量中):

-nostdlib -nostartfiles -nodefaultlibs -ffreestanding

如果您不知道如何将这些附加到 CFLAGS 的末尾,请尝试以下操作:

export CFLAGS=$CFLAGS -nostdlib -nostartfiles -nodefaultlibs -ffreestanding

【讨论】:

    【解决方案2】:

    试试:

    DARWIN_VERSION_FULL=darwin`uname -r`
    ./configure --build=x86_64-apple-${DARWIN_VERSION_FULL} --host=x86_64-unknown-linux
    

    现在configure 应该处于交叉编译模式,并停止运行该测试。

    【讨论】:

    • 不改变任何东西。对于它的价值,我不是为 x86_64-unknown-linux 构建,我为 x86_64-elf 构建。
    • 您是否设置了环境变量(例如 CC、LD 等)以指向交叉编译器?
    猜你喜欢
    • 2021-06-16
    • 2015-03-27
    • 1970-01-01
    • 2022-11-14
    • 2021-02-04
    • 1970-01-01
    • 2013-06-17
    • 1970-01-01
    相关资源
    最近更新 更多