Может ли эта программа на языке C, которая использует исключительно несвязанную стандартную библиотеку C и скомпилирована для Linux, работать в Windows?

Может ли эта программа на языке C, которая использует исключительно несвязанную стандартную библиотеку C и скомпилирована для Linux, работать в Windows?

Вопрос несколько специфичен, поэтому предположим следующее:

  1. Исходный код программы на языке C явно не использует платформенно-специфичные функции (например, он явно не использует системные вызовы).
  2. Для взаимодействия с ОС исходный код использует C stdlib.
  3. Stdlib не компонуется во время компиляции.
  4. Программа была скомпилирована для Linux на машине под управлением Linux, а затем перенесена на другую машину под управлением Windows.
  5. Перед запуском программы в Windows исполняемый файл Linux (каким-то образом) преобразуется в формат, совместимый с Windows.
  6. Обе машины имеют одинаковое аппаратное обеспечение.
  7. На обеих машинах реализована библиотека C stdlib.

Теперь вопрос(ы):

  1. Учитывая все вышеизложенные предположения, может ли программа работать на Windows? Если нет, то почему?
  2. Если какое-то предположение неверно, то почему?

решение1

Бинарные файлы в Windows и Linux имеют совершенно разный формат, поэтому один не может работать на другом. Общие библиотеки Linux совсем не то же самое, что Windows DLL.

Межсистемное выполнение достигается одним из следующих способов:

  • Повторная компиляция для целевой системы (многие компиляторы способны компилировать на системе A для выполнения на B)
  • Запуск на эмуляторе, например ВИНО, CrossOver и другие
  • Запуск на виртуальной машине, подсистеме Windows для Linux (WSL), Docker или аналогичной.

решение2

Нет. Формат исполняемого файла Linux несовместим с Windows. Вам придется перекомпилировать программу для Windows.

Кроме того, вы можете запустить программу непосредственно в подсистеме Windows для Linux или на виртуальной машине под управлением Linux.

Связанный контент