虽然网上有很多关于如何制作交叉编译器的教程,但我其实不太明白。
我正在使用
fedora 16
并且已经安装了 gcc
。我不确定binutils
。如何为我自己的操作系统(目标)制作交叉编译器?我正在阅读 here on os dev wiki 但我不明白。我的意思是,我该怎么办?我只是不遵循那里的步骤。
注意: 我想为我当前正在使用的相同架构构建一个交叉编译器。我的意思是与运行 Fedora 的相同架构。
如果您自己的操作系统的架构与您正在运行的操作系统相同,那么您不需要新的编译器,您已经拥有的编译器就可以了。不过,您可能仍然需要自定义
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)
}
}