
Вопрос несколько специфичен, поэтому предположим следующее:
- Исходный код программы на языке C явно не использует платформенно-специфичные функции (например, он явно не использует системные вызовы).
- Для взаимодействия с ОС исходный код использует C stdlib.
- Stdlib не компонуется во время компиляции.
- Программа была скомпилирована для Linux на машине под управлением Linux, а затем перенесена на другую машину под управлением Windows.
- Перед запуском программы в Windows исполняемый файл Linux (каким-то образом) преобразуется в формат, совместимый с Windows.
- Обе машины имеют одинаковое аппаратное обеспечение.
- На обеих машинах реализована библиотека C stdlib.
Теперь вопрос(ы):
- Учитывая все вышеизложенные предположения, может ли программа работать на Windows? Если нет, то почему?
- Если какое-то предположение неверно, то почему?
решение1
Бинарные файлы в Windows и Linux имеют совершенно разный формат, поэтому один не может работать на другом. Общие библиотеки Linux совсем не то же самое, что Windows DLL.
Межсистемное выполнение достигается одним из следующих способов:
- Повторная компиляция для целевой системы (многие компиляторы способны компилировать на системе A для выполнения на B)
- Запуск на эмуляторе, например ВИНО, CrossOver и другие
- Запуск на виртуальной машине, подсистеме Windows для Linux (WSL), Docker или аналогичной.
решение2
Нет. Формат исполняемого файла Linux несовместим с Windows. Вам придется перекомпилировать программу для Windows.
Кроме того, вы можете запустить программу непосредственно в подсистеме Windows для Linux или на виртуальной машине под управлением Linux.