OSDev
http://osdev.ru/

Объектные файлы в разных осях
http://osdev.ru/viewtopic.php?f=6&t=828
Страница 1 из 1

Автор:  mikesmmm [ 28 ноя 2013, 04:53 ]
Заголовок сообщения:  Объектные файлы в разных осях

Доброго времени суток!

Подскажите, пожалуйста, ответ на такой вопрос:

Объектный файл, который возникает в результате компиляции исходника на Си в ОС Ubuntu с компилятором gcc
и объектный файл, который возникает в результате компиляции того же исходника, но уже в ОС Windows с MinGW или Cygwin,
они имеют разный формат? (у меня они не компонуются в исполняемую программу на отличных ОС, процессор одинаковый).

Автор:  SII [ 28 ноя 2013, 12:17 ]
Заголовок сообщения:  Re: Объектные файлы в разных осях

Сам формат, по идее, одинаковый -- ELF (может быть, в MinGW/Cygwin GCC умеет и виндузовые COFFы выдавать, но скорей всё же ELF, что легко проверить: глянуть первые байты объектника). Возможно, компоновщик отказывается их связывать из-за разных атрибутов; надо их посмотреть с помощью какого-нибудь readelf или ещё какой утилиты.

Автор:  pavia [ 28 ноя 2013, 12:47 ]
Заголовок сообщения:  Re: Объектные файлы в разных осях

Исполняемые файлы бывают разных форматов PE,ELF, COM, MZ.
Которые состоят из объектных файлов.
OBJ - несколько разновидностей.
Для справки COFF и OMF разновидности OBJ.
Которые в свою очередь тоже делятся на разновидности.

Как следствие - PE имеет несколько разновидностей не меньше 3 штук.
ELF - тоже имеет несколько разновидностей, так что между ОС переносить нельзя.
И от настроек многое тоже зависит.

А разве Cygwin GCC выдает ELF? Он вроде только PE выдаёт.

Автор:  SII [ 28 ноя 2013, 13:15 ]
Заголовок сообщения:  Re: Объектные файлы в разных осях

pavia писал(а):
А разве Cygwin GCC выдает ELF? Он вроде только PE выдаёт.

Речь идёт об объектных файлах, а не об исполняемых. Исполняемые в Винде, есно, COFF-PE.

Кстати говоря, этой теме делать в этом разделе явно нечего.

Автор:  Himik [ 28 ноя 2013, 14:44 ]
Заголовок сообщения:  Re: Объектные файлы в разных осях

Объектник зависит в основном от целевой ОС (target). К тому же, у gcc и ld есть префиксы в названиях, указывающие на конкретную целевую платформу: mingw32-gcc, i686-linux-gnu-gcc, mingw32-ld, i686-linux-gnu-ld. Для нормальной работы префиксы должны совпадать. Можно использовать файлы и без префикса, тогда просто смотрим gcc -v

Автор:  mikesmmm [ 05 дек 2013, 10:19 ]
Заголовок сообщения:  Re: Объектные файлы в разных осях

Спасибо за ответы. Да, форматы у них получаются разные. А конвертеры существуют?

Автор:  Himik [ 05 дек 2013, 18:49 ]
Заголовок сообщения:  Re: Объектные файлы в разных осях

Конвертеров нет. Кросс-компиляция делается так, как я писал выше, проблем в общем-то нет.

Автор:  Nable [ 05 дек 2013, 23:55 ]
Заголовок сообщения:  Re: Объектные файлы в разных осях

Как сказать. В некотором смысле, objcopy является таким конвертером. Но это изврат, лучше всё-таки сразу компилировать под правильную целевую систему (target).

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/