Cygwin - эмуляционный слой. Он позволяет запускать код UNIX в Windows, если вы компилируете его для использования уровня эмуляции. Для Windows это выглядит как любая обычная DLL и делает обычные вызовы ОС. Но когда вы компилируете его, он показывает те же функции, что и UNIX (ну, технически POSIX, но UNIX это так)
1) При сборке с помощью cygwin автоматически включается этот cygwin1.dll. Это код, который вам нужен, чтобы он выглядел как UNIX. Есть флаги, позволяющие ему не использовать эту cygwin dll, что означает игнорирование UNIX и использование собственных вызовов Windows. флаг -mno-cygwin
сделает двоичный файл родным двоичным файлом Windows, не используя эмуляцию cygwin. Как уже говорили другие, вам также нужно -mwindows
, чтобы создавать настоящие приложения с графическим интерфейсом, используя cygwin gcc.
2) Чтобы скомпилировать на одной платформе для запуска на другой платформе, вам нужен так называемый кросс-компилятор. Вам также нужны библиотеки и заголовки для другой системы. Для того, что вы хотите, вам понадобится кросс-компилятор Cygwin-Linux, заголовки Linux и библиотеки. Вероятно, было бы намного проще запустить Linux на виртуальной машине, чем настроить это.
3) Помните, что Cygwin выглядит как код UNIX для UNIX source
, а не для двоичных файлов Linux. После компиляции вызовы функций становятся вызовами Windows DLL. Программа cygwin по-прежнему является программой Windows (поэтому для ее запуска вам нужна DLL-библиотека в стиле Windows). Cygwin предоставляет код для функций / системных вызовов UNIX, таких как fork (), но даже метод вызова их теперь другой. Теперь fork () вызывает в Windows DLL, а не в ядре Linux. Это все еще совсем другая система.