1) EXE - файл это исполняемый модуль, бинарный файл. Одна из его частей - ссылки на другие библиотеки и функции. Часть из этих функций - функции операционной системы Windows. Эти функции часть набора функций интерфейса прикладного программирования (Application Programming Interface - API). Этот набор функций уникален для каждой операционной системы: в Windows он свой, а в Linux он свой.
2) Компилятора для создания EXE-файла мало: нужен линкер (
компоновщик). Компилятор создаёт объектные файлы, а линкер создаёт исполняемый модуль (dll или exe), связывая объектные файл, статически и динамически компонуемые библиотеки. В частности, задача линкера создать секции с таблицами импорта и экспорта. В таблицы экспорта входят имена динамически компонуемых библиотек. В другой операционной системе таких библиотек по понятным причинам нет.
3) Динамически компонуемые библиотеки (DLL), во-первых сами имеют ссылки на другие dll, а во-вторых при загрузе (часто)
выполняют некоторую работу, которая может быть уникальна для конкретной операционной системы.
Именно поэтому перекомпилировать уже "собранный" exe-файл под Linux невозможно.
Однако, существуют специальные программы (системы), например
Wine которые позволяют под Linux'ом использовать программы написанные под Windows.