Ответ 1
Вкл. 1: Да. Библиотеки Socket поставляются с Cygwin - в базовый дистрибутив включены многие приложения на основе сокетов, такие как веб-серверы.
Вкл. 2: Да. Я думаю, что все системные вызовы "раздела 2 и 3" в среде исполнения и библиотеки GNU C реализованы в runtume cygwin. Вы можете проверить это на страницах руководства, которые поставляются с Cygwin. Список системных вызовов и вызовов std lib, реализуемых Cygwin, можно найти здесь.
Вкл. 3: Да. Pthread включен в Cygwin. Список, упомянутый в ссылке выравнивание слов, endianness и другие проблемы, связанные с архитектурой, но если вы ориентируетесь на Windows и Linux на Intel, ваш код будет иметь несколько проблем с переносом, возникающих из архитектуры процессора.
В 5: Cygwin по умолчанию будет создавать программу против своих собственных разделяемых библиотек, но GCC может перекрестно скомпилировать ее для других платформ. Вы могли (теоретически) установить GCC для кросс-компиляции любой цели, поддерживаемой компилятором. Есть множество ресурсов в Интернете о кросс-компиляции с GCC, и я не думаю, что процесс будет существенно отличаться от Cygwin.
Обратите внимание, что двоичные файлы Cygwin не будут работать на Linux - или наоборот. Вам все равно понадобятся отдельные сборки для обоих.
В 6: Не уверен - при условии, что он включен в стандартную среду выполнения, возможно, потому, что по какой-то причине необходимо было обернуть API-интерфейс нитей Win32.
На 7: Не знаю - это, вероятно, то же самое на g++ на всех платформах. Видимо ошибка компилятора. Dan Molding Answer описывает это более подробно.
В 8: Да. IIRC QT доступен в стандартных сборках, и он наверняка скомпилируется на Cygwin. Как и в Linux/Unix, QT на Cygwin использует бэкэнд X11, поэтому вам нужно будет иметь X-сервер, такой как XMing.
Чтобы избежать зависимости от сервера X, вы можете создавать приложения QT против API Win32,. Это можно сделать с помощью MinGW, который представляет собой набор файлов заголовков и библиотек для создания собственных приложений Win32 с GCC. MinGW можно использовать из среды Cygwin (пример GCC для кросс-компиляции Cygwin для цели, отличной от Cygwin), и cygwin.com дает вам возможность установить его.
MinGW довольно зрелый; он имеет все "обычные подозреваемые" - библиотеки и файлы заголовков, которые вы ожидаете найти в среде разработки Unix/Linux GCC и очень стабильны. Это часто является инструментом выбора для построения портов Win32 с открытым исходным кодом, поскольку он (a) свободен, (б) поддерживает библиотеки, используемые программным обеспечением, и (c) использует GCC, поэтому на него не влияют диалектические вариации между MSVC и GCC.
Однако эти диалектические вариации в языке и доступных библиотеках (например, MSVC не имеют реализации getopt
) означают, что программы переноса между MinGW и MSVC могут быть довольно затруднительными. Мой опыт - по общему признанию, не очень обширный, как я это делал несколько раз, - то, что перенос приложений между MinGW32 и Linux проще, чем перенос между MinGW и MSVC. Очевидно, что приложения с непереносимыми зависимостями, такими как использование API в Win32, потребуют перезаписывания зависимых компонентов для новой платформы, но у вас будет гораздо меньше проблем с различиями в стандартных файлах libs, заголовках и диалекте языка.
QT делает довольно хорошую работу по обеспечению уровня абстракции платформы. Он предоставляет API для доступа к базе данных, потоков, ввода-вывода и многих других сервисов, а также графического интерфейса. Использование API QT, где это возможно, должно помочь с переносимостью, а библиотеки с поддержкой Unix/Linux, поставляемые с MinGW, означают, что это может дать вам хорошую платформу для создания приложений, которые будут переносить между Win32 и Linux с относительно небольшим зависящим от платформы кодом.
РЕДАКТИРОВАТЬ: Пакеты разработки qt в Cygwin:
- qt4: инфраструктура приложения Qt (источник)
- qt4-devel-tools: Qt4 Assistant, Designer и Linguist
- qt4-doc: документация по API Qt4
- qt4-qtconfig: приложение для настройки рабочего стола Qt4
- qt4-qtdemo: демонстрации и примеры Qt4
Вероятно, вам также понадобятся gcc4-g++ и некоторые другие фрагменты. Этот список на веб-сайте cygwin содержит список пакетов.