Это в значительной степени зависит от компоновщика и других инструментов разработки, которые у вас есть.Конечно, перекрестная компиляция возможна в сложной среде, такой как gcc
, где вы можете генерировать объектный код для различных архитектур.
Но упаковывать все эти объекты с различной архитектурой объектовв один исполняемый файл это не то, что я когда-либо видел в gcc
.
Я видел толстые двоичные файлы на платформах Apple (где исполняемый файл будет работать на старых компьютерах Mac 68K или более новых PowerPC)) но я никогда не был их большим поклонником, и Apple полностью контролировала их окружение.
Кроме того, код загрузчика (обычно часть ОС) должен уметь определять, какойархитектура, которую он должен извлекать и запускать из такого толстого бинарного файла (вот где контроль Apple пригодился - они могли модифицировать свои различные операционные системы для обнаружения и загрузки правильной версии).
Лично я думаю, что вы былибо лучше использовать переносимый язык (Java, Perl, Python и др.), либо упаковать ваше приложение в другойдвоичные файлы - вы всегда можете использовать один из отличных кроссплатформенных наборов инструментов для установки правильной версии.
На основании ваших правок, уточняющих вопрос: да.Если файлы object действительно являются кроссплатформенными, они будут работать на всех этих платформах.Таким образом, по определению, вы можете создать специфичный для платформы исполняемый файл на основе этого.Обратите внимание, что это не то же самое, что компиляция некоторого кроссплатформенного исходного кода , поскольку сам процесс компиляции, скорее всего, заблокирует его для конкретной платформы.
И, опять же, это зависит отиспользуемая цепочка инструментов (компилятор, компоновщик, загрузчик и т. д.).