Підкресліть себе, це питання, ймовірно, здасться наївним та / або нерозумним, побачивши, як я відносно новачок у внутрішній роботі Unix, як систем, і в цілому програмуванні.
Готові? Добре! Я пройду приблизно 3 рівня лудікрозності, зростаючи в міру подальшого розвитку.
У нас є дві системи з подібним обладнанням (головним моментом є процесор, скажімо, стандартний дует Intel Core 2 duo).
Один працює (вставте сюди linux distro: 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, а потім замість цього компілювали програму вище за допомогою динамічного посилання. Чи вдасться програму все-таки запустити?
Так і повинно бути, очевидно, що кожен крок абсурду покладається на попередню базу, щоб навіть мати сенс. тож якщо перший стовп буде зруйнований, я сумніваюся, що було б багато заслуг для решти ярусів.
Я точно не хотів би навіть думати про це з програмами, які мають на увазі графічний інтерфейс. Віконні системи, ймовірно, будуть зовсім іншим головним болем. На цьому етапі я розглядаю лише програми командного рядка.
Тепер я закликаю світ виправити мене і розповісти мені все, що не так з моєю абсурдною думкою.