-1

虽然网上有很多关于如何制作交叉编译器的教程,但我实际上并没有得到它。

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

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

4

1 回答 1

1

如果您自己的操作系统的体系结构与您正在运行的操作系统相同,那么您不需要新的编译器,您已经拥有的编译器就可以了。不过,您可能仍然需要 custom 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)
    }
}
于 2013-07-16T14:45:42.780 回答