【发布时间】:2020-01-05 18:18:31
【问题描述】:
我使用的是 64 位 linux 机器 我在做一些操作系统开发,据说需要使用交叉编译器为目标系统生成代码。 准系统教程 (https://wiki.osdev.org/Bare_bones) 指导使用主机操作系统的本机编译器构建 i686-gcc 编译器(我相信它是 gcc 7.4.0)。
但是,可以使用 gcc 本身为其他目标平台生成代码,例如。
gcc -ffreestanding -c -fno-pie -m32 source.c -o source.o
ld source.o -o flatbinary.bin -m elf_i386 -Ttext 0x10000 --oformat binary
我相信第一个命令会为 32 位机器创建一个 ELF 对象。 (不使用标准库?我认为 -ffreestanding 代表这一点) 第二个命令创建一个平面二进制图像,其中绝对(虚拟?)地址偏移 0x10000。
这不是交叉编译器的作用吗?为什么需要单独的交叉编译器??
注意:我刚刚涉足编译器、目标文件等的广阔世界,并且刚刚开始了解。我可能有一些根本不正确的概念。 :(
【问题讨论】:
标签: c gcc compilation x86 osdev