Необходимость построения кросс-компилятора - PullRequest
0 голосов
/ 05 января 2020

Я использую 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. и я только начинаю понимать. Я мог бы иметь некоторые концепции в корне неверные. (

Ответы [ 2 ]

2 голосов
/ 05 января 2020

x86-64 ELF G CC (как вы найдете на Linux) отлично подходит для компиляции для 32-битного x86 / ELF.

Если вы работали на каком-то другом ISA, например ARM, вам понадобится кросс-компилятор для таргетинга на i386.

Если вы используете Windows, вам может потребоваться кросс-компилятор для создания 32-битных объектов x86 ELF, потому что MinGW или Cygwin G CC будут создавать PE / COFF объектные файлы, а не ELF. Правильный машинный код, неправильный формат объектного файла.

0 голосов
/ 05 января 2020

Рекомендуется создать кросс-компилятор, чтобы избежать ошибок при компиляции операционной системы, но это не обязательно.

...