Кроме того, как Mac и Linux используют другой тип исполняемого файла (насколько я видел, они используют Mach-O и ELF), чем Windows (PE), если исполняемый загрузчик смог проанализировать все и загрузить его в память многие вещи могут пойти не так. Библиотечные вызовы, такие как printf(3)
, основаны на базовых системных вызовах, которые вызывают ядро ОС. В случае printf (3) он вызывает fstat(2)
, sbrk(2)
и write(2)
. (Обратите внимание, что это относится к библиотеке newlib
; я не уверен насчет других стандартных библиотек C.) Насколько вы знаете, интерфейс системных вызовов для Windows может сильно отличаться от того, который использует Linux, и Windows может даже пропустить несколько системных вызовов, которые есть в Linux (например, fork(2)
)