Готовьтесь, этот вопрос, скорее всего, покажется наивным и / или глупым, поскольку я относительно новичок во внутренней работе Unix-подобных систем и программирования в целом.
Готовы? Хорошо! Я прохожу около 3 уровней ludicrosity, увеличиваясь по мере продвижения.
У нас есть две системы с одинаковым оборудованием (главное - процессор, скажем, стандартный Intel Core 2 Duo).
Один работает (вставьте ваш дистрибутив Linux здесь: Ubuntu будет использоваться впредь), а другой работает, скажем, Mac OS X.
Один компилирует эквивалентную программу, скажем что-то вроде:
int main()
{
int cat = 33;
int dog = 5*cat;
return dog;
}
Код очень прост, потому что я пока не хочу рассматривать последствия использования разделяемых библиотек.
При компиляции в соответствующих системах. Разве основное различие между выходом не имеет значения ELF против Mach-O? Если бы кто-то удалял каждый двоичный файл форматирования, оставляя плоский двоичный файл, разве машинные инструкции не были бы одинаковыми? (возможно, с некоторыми отличиями в зависимости от привычек / тенденций компиляторов).
1.) Если бы нужно было разработать программу для переупаковки плоского двоичного файла, созданного из нашей системы Ubuntu, в формате Mach-O, будет ли он работать в системе Mac OS X? Тогда, если бы у кого-то был только скомпилированный двоичный файл предполагаемой программы выше, а у другого был этот мистический инструмент для переупаковки плоских двоичных файлов, могли бы простые программы работать в системе Mac OS X?
Теперь давайте продолжим.
Теперь у нас есть программа с источником, таким как:
#include <stdio.h>
int main()
{
printf("I like tortoises, but not porpoises");
return 0;
}
2.) Предполагая, что эта программа скомпилирована и статически связана, сможет ли наша магическая программа по-прежнему переупаковывать необработанный двоичный файл в формате Mach-O и работать ли он на Mac OS X? Видя, что не нужно полагаться на какие-либо другие двоичные файлы (для которых система Mac не будет в этом случае)
А теперь для финального уровня;
3.) Что если мы использовали эту предполагаемую программу для преобразования всех необходимых общих библиотек в формат Mach-O, а затем вместо этого скомпилировали программу выше с динамическим связыванием. Будет ли программа по-прежнему работать?
Это должно быть на данный момент, очевидно, каждый шаг абсурда опирается на предыдущую базу, чтобы даже иметь смысл. поэтому, если самый первый столб будет разрушен, я сомневаюсь, что оставшиеся уровни будут иметь много достоинств.
Я бы даже не зашел так далеко, чтобы думать об этом, имея в виду программы с графическим интерфейсом. Оконные системы, скорее всего, будут совсем другой головной болью. На данном этапе я рассматриваю только программы командной строки.
Теперь я приглашаю мир исправить меня и рассказать обо всем, что не так с моим абсурдным мышлением.