Я использую 64-битную linux машину. Я занимался разработкой операционной системы, где говорится, что вам нужно использовать кросс-компилятор для генерации кода для целевой системы. Базовое руководство (https://wiki.osdev.org/Bare_bones) дает указание создать компилятор i686-g cc с использованием собственного компилятора операционной системы хоста (я полагаю, что это g cc 7.4.0).
Однако можно создать код для других целевых платформ, используя сам g cc, например.
gcc -ffreestanding -c -fno-pie -m32 source.c -o source.o
ld source.o -o flatbinary.bin -m elf_i386 -Ttext 0x10000 --oformat binary
Я считаю, что первая команда создает объект ELF для 32-битной машины. (Без стандартной библиотеки? Я думаю, что -ffreestanding означает это) Вторая команда создает плоское двоичное изображение, в котором абсолютные (виртуальные?) Адреса смещены на 0x10000.
Разве это не кросс-компилятор? делает? Зачем мне нужен отдельный кросс-компилятор ??
Примечание: я только что попал в этот огромный мир компиляторов, объектных файлов и т. Д. c. и я только начинаю понимать. Я мог бы иметь некоторые концепции в корне неверные. (