如何使用gcc制作交叉编译器?

问题描述 投票:0回答:1

虽然网上有很多关于如何制作交叉编译器的教程,但我其实不太明白。

我正在使用

fedora 16
并且已经安装了
gcc
。我不确定
binutils
。如何为我自己的操作系统(目标)制作交叉编译器?我正在阅读 here on os dev wiki 但我不明白。我的意思是,我该怎么办?我只是不遵循那里的步骤。

注意: 我想为我当前正在使用的相同架构构建一个交叉编译器。我的意思是与运行 Fedora 的相同架构。

linux gcc cross-compiling fedora
1个回答
1
投票

如果您自己的操作系统的架构与您正在运行的操作系统相同,那么您不需要新的编译器,您已经拥有的编译器就可以了。不过,您可能仍然需要自定义

binutils
,但这取决于可执行文件的格式 您自己的操作系统 需要。

我为我自己的玩具操作系统所做的就是让它理解 ELF 二进制文件:这是一种非常容易加载和运行的格式。这样您就可以使用操作系统的标准

binutils
。您只需使用自定义链接器脚本链接可执行文件,而不是链接任何 Linux 库。

但请注意,很多人认为这不是一个好主意,但它可能会让你坚持一段时间。

我的编译器命令如下所示:

%.o: %.c
        gcc -c -o $@ -ffreestanding -fno-stack-protector -mpreferred-stack-boundary=2 -Os -g -Wall $<

我的链接器命令:

%.myexe: %.o
        ld -o $@ -T myexe.ld $^ `gcc -print-libgcc-file-name`

供参考,链接器脚本是

myexe.ld
:

ENTRY(main)

SECTIONS
{
    .text :
    {
        *(.text)
    }
    .data :
    {
        *(.data)
    }
    .rodata :
    {
        *(.rodata)
    }
    .bss :
    {
        *(.bss)
    }
}
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.