Связывать несколько раз один кроссплатформенный объектный файл? - PullRequest
1 голос
/ 27 сентября 2011

Если я скомпилирую кроссплатформенный фрагмент кода в объектный файл, можно ли будет использовать компоновщик для создания отдельных зависящих от платформы исполняемых файлов (.exe, .bin) из этого отдельного двоичного файла?

РЕДАКТИРОВАТЬ: Кажется, ответчики не совсем поняли мой вопрос.Я спрашиваю, можете ли вы использовать кроссплатформенный объект и генерировать зависимые от платформы исполняемые файлы из этого.

Ответы [ 2 ]

1 голос
/ 27 сентября 2011

Сжатые двоичные файлы также должны поддерживаться в linux, однако никогда не пытались.

На странице FatELF говорится, что они поддерживают статические и динамические библиотеки, их faq кажется обширным.

1 голос
/ 27 сентября 2011

Это в значительной степени зависит от компоновщика и других инструментов разработки, которые у вас есть.Конечно, перекрестная компиляция возможна в сложной среде, такой как gcc, где вы можете генерировать объектный код для различных архитектур.

Но упаковывать все эти объекты с различной архитектурой объектовв один исполняемый файл это не то, что я когда-либо видел в gcc.

Я видел толстые двоичные файлы на платформах Apple (где исполняемый файл будет работать на старых компьютерах Mac 68K или более новых PowerPC)) но я никогда не был их большим поклонником, и Apple полностью контролировала их окружение.

Кроме того, код загрузчика (обычно часть ОС) должен уметь определять, какойархитектура, которую он должен извлекать и запускать из такого толстого бинарного файла (вот где контроль Apple пригодился - они могли модифицировать свои различные операционные системы для обнаружения и загрузки правильной версии).

Лично я думаю, что вы былибо лучше использовать переносимый язык (Java, Perl, Python и др.), либо упаковать ваше приложение в другойдвоичные файлы - вы всегда можете использовать один из отличных кроссплатформенных наборов инструментов для установки правильной версии.


На основании ваших правок, уточняющих вопрос: да.Если файлы object действительно являются кроссплатформенными, они будут работать на всех этих платформах.Таким образом, по определению, вы можете создать специфичный для платформы исполняемый файл на основе этого.Обратите внимание, что это не то же самое, что компиляция некоторого кроссплатформенного исходного кода , поскольку сам процесс компиляции, скорее всего, заблокирует его для конкретной платформы.

И, опять же, это зависит отиспользуемая цепочка инструментов (компилятор, компоновщик, загрузчик и т. д.).

...