#c #gcc #компиляция #компилятор
По определению, объектный код - набор инструкций для определённой архитектуры процессора. Возьмём компилятор GCC. Если компилировать один и тот же код из-под разных платформ(Linux/Windows etc.), но на одном железе, на выходе получим с виду одинаковые *.o файлы, которые не будут кросплатформенны. Почему? Чтобы исключить разность реализаций библиотек, возьмём код без них, что-то вроде: //main.c int main() { return 5+3; } //main.c EOF
Ответы
Ответ 1
По определению, объектный код - набор инструкций для определённой архитектуры процессора. Это правда. Но НЕ вся правда. Кроме собственно инструкций процессора он содержит таблицу внешних ссылок, таблицу перемещаемых адресов и т.д. Эти таблицы используются загрузчиком/линкером при подготовки объектного модуля к выполнению. Ни сами таблицы, ни метод настройки объектного модуля не стандартизованы. В силу этого, объектный модуль, подготовленный для исполнения на одной платформе, не может быть выполнен на другой. Можно было бы попытаться написать не очень сложный транслятор одного формата в другой, но проблема практически неразрешима, т.к. различается не только сам формат объектного модуля, но и формат вызовов внешних функций (структура стека) и даже формат вызова функций ОС. Дело дохлое...
Комментариев нет:
Отправить комментарий