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