Некоторые вопросы о Cygwin [Linux в Windows] (проблемы с сокетами, потоками, другие вопросы программирования и оболочки) - PullRequest
16 голосов
/ 18 января 2010

У меня есть вопрос о Cygwin:

  1. Могу ли я использовать Cygwin для разработки кода на основе сокетов?
  2. Имеет ли Cygwin функции read() и write(), которые работают с файловыми дескрипторами?
  3. Можно ли использовать библиотеку Pthread в Cygwin?
  4. Имеет ли код, который компилируется в Cygwin, также компилировать в Linux без каких-либо изменений или с небольшими изменениями?
  5. Будет ли исполняемый файл, который построен Cygwin работает в Linux?
  6. Почему Cygwin не нужен компоновщик опция -lpthread когда я использую библиотеку pthread?
  7. почему в #include <iostream> мне не нужно использовать using namespace std;?
  8. Могу ли я работать с QT в Cygwin? Если да, то как?
  9. Могу ли я загрузить свой Linux в другой
  10. раздел с Cygwin и использовать его?
  11. Могу ли я получить доступ к другому разделу что такое EXT3 в Cygwin?

Ответы [ 6 ]

14 голосов
/ 21 января 2010

Вкл. 1: Да. Библиотеки сокетов поставляются с Cygwin - многие базовые приложения, такие как веб-серверы , включены в базовый дистрибутив.

Вкл 2: Да. Я думаю, что все системные вызовы 'section 2 и 3' в среде выполнения и библиотеке GNU C реализованы в cygwin runtume. Вы можете проверить это на страницах руководства, которые идут с Cygwin. Список системных вызовов и вызовов std lib, реализованных Cygwin, можно найти здесь .

Вкл 3: Да. Pthread включен в Cygwin. В списке, указанном в ссылке выше , также упоминается pthreads.

On 4: Все, что построено на библиотеках GNU, должно работать практически без изменений между Cygwin и Linux (при условии, что в Cygwin отсутствуют какие-либо зависимости). В зависимости от архитектуры процессора вам может потребоваться выравнивание слов , endianness и другие проблемы переноса, специфичные для архитектуры, но если вы ориентируетесь на Windows и Linux на Intel, в вашем коде будет мало если какие-либо проблемы с портированием, возникающие из-за архитектуры процессора.

On 5: Cygwin по умолчанию создаст программу из собственных общих библиотек, но GCC может выполнять кросс-компиляцию для других платформ. Вы можете (теоретически) установить GCC для кросс-компиляции для любой цели, поддерживаемой компилятором. В Интернете много ресурсов о кросс-компиляции с GCC, и я не думаю, что процесс будет существенно отличаться в Cygwin.

Обратите внимание, что двоичные файлы Cygwin не будут работать в Linux или наоборот. Вам все равно понадобятся отдельные сборки для обоих.

В 6: Не уверен - по-видимому, он включен в стандартную среду выполнения, возможно, из-за необходимости по какой-то причине обернуть API потоков Win32.

На 7: Не знаю - на g ++, наверное, одинаково на всех платформах. Видимо ошибка компилятора. Ответ Дэна Молдинга описывает это более подробно.

Вкл 8: Да. IIRC QT доступен в стандартных сборках и, безусловно, будет компилироваться на Cygwin. Как и в Linux / Unix, QT на Cygwin использует серверную часть X11, поэтому вам потребуется работающий X-сервер, такой как XMing .

Чтобы избежать зависимости от X-сервера, вы можете создавать приложения QT для Win32 API, . Это можно сделать с помощью MinGW , который представляет собой набор заголовочных файлов и библиотек для создания собственных приложений Win32 с GCC. MinGW можно использовать из среды Cygwin (пример GCC для кросс-компиляции Cygwin с целью, отличной от Cygwin), а установщик из cygwin.com дает вам возможность установить его.

MinGW вполне зрелый; у него есть все «обычные подозреваемые» - библиотеки и заголовочные файлы, которые вы ожидаете найти в среде разработки Unix / Linux GCC, и он очень стабилен. Это часто является предпочтительным инструментом для создания портов Win32 программного обеспечения с открытым исходным кодом, потому что оно (а) бесплатно, (б) поддерживает библиотеки, используемые программным обеспечением, и (в) использует GCC, поэтому на него не влияют диалектические различия между MSVC и GCC.

Однако, эти диалектические различия в языке и доступных библиотеках (например, MSVC не имеет реализации getopt) означают, что перенос программ между MinGW и MSVC может быть довольно сложным. Мой опыт - по общему признанию не очень обширный, поскольку я только сделал это несколько раз - что портирование приложений между MinGW32 и Linux легче, чем портирование между MinGW и MSVC. Очевидно, что приложения с непереносимыми зависимостями, такими как специфическое использование Win32 API, потребуют переписывания зависимых компонентов для новой платформы, но у вас будет гораздо меньше проблем с различиями в стандартных библиотеках, заголовочных файлах и языковом диалекте.

QT довольно неплохо справляется с обеспечением уровня абстракции платформы. Он предоставляет API для доступа к базе данных, потоков, ввода-вывода и многих других служб, а также графический интерфейс. Использование API QT, где это возможно, должно помочь с переносимостью, а ароматизированные библиотеки Unix / Linux, которые поставляются с MinGW, означают, что это может дать вам хорошую платформу для создания приложений, которые будут портировать между Win32 и Linux с относительно небольшим зависимым от платформы кодом.

РЕДАКТИРОВАТЬ: Пакеты разработки qt в Cygwin:

  • qt4: каркас приложения Qt (источник)
  • qt4-devel-tools: Qt4 Assistant, Designer и Linguist
  • qt4-doc: документация по Qt4 API
  • qt4-qtconfig: приложение для настройки рабочего стола Qt4
  • qt4-qtdemo: демонстрации и примеры Qt4

Вам, вероятно, также понадобится gcc4-g ++ и некоторые другие фрагменты. Этот список на веб-сайте cygwin содержит список пакетов.

3 голосов
/ 18 января 2010

«Да» для всех тех, кроме 5. Вам придется создавать свои исполняемые файлы отдельно для Linux, но это должно быть просто, поскольку ответ на 4 - «да».все заголовки разработки, которые вам нужны на обеих платформах.

2 голосов
/ 23 января 2010

1-4: Ответы на все эти вопросы "да", потому что все эти функции, о которых вы спрашиваете, являются частью стандарта POSIX. Cygwin - это, по сути, слой POSIX для Windows, поэтому, естественно, Cygwin включает в себя все эти функции.

5: Нет, двоичные файлы Cygwin не будут выполняться под ядром Linux, поскольку в конечном итоге код, сгенерированный Cygwin, является собственным кодом Windows. Он будет связываться с обычными библиотеками Windows (например, kernel32.dll), тогда как в Linux даже нет понятия DLL (у него есть общие объекты, которые похожи, но различны). Более того, исполняемые файлы, созданные в Cygwin, будут иметь формат PE, но Linux обычно использует формат ELF для исполняемых файлов. Конечно, вы можете сделать кросс-компиляцию под Cygwin и таким образом сгенерировать нативные исполняемые файлы Linux, но это не похоже на то, что вы ищете. Кроме того, компиляция новой версии GCC для использования в качестве кросс-компилятора в Cygwin, вероятно, не является тривиальной задачей.

6: GCC в Cygwin не требует использования -lpthread, поскольку весь код pthread в Cygwin находится в файле cygwin1.dll, который всегда связан по умолчанию.

7: Это ошибка в GCC (на всех платформах). Он существует уже долго и, вероятно, никогда не будет исправлен.

8: ConcernedOfTunbridgeWells проделали большую работу по объяснению этого, поэтому мне нечего сказать. Тем не менее, стоит отметить, что Cygwin имеет X.org X Window System в своем списке пакетов. В Cygwin 1.7.x его настройка и использование - это breeze , и он кажется довольно надежным. Если вы хотите использовать Qt с X, я бы порекомендовал использовать X-сервер Cygwin.

2 голосов
/ 18 января 2010

Да, да, да, да (если вы пишете это аккуратно и не используете ничего специфического для cygwin), нет.

В 5: возможно выполнить кросс-компиляцию из Cygwin в LinuxЯ действительно не знаю.Если это так, то технически некоторые исполняемые файлы, «созданные Cygwin», будут работать в Linux.Но исполняемые файлы Cygwin не будут работать в Linux.

1 голос
/ 21 января 2010

Что касается 6, вам не нужен -lpthread, потому что поддержка Pthreads является частью Cygwin DLL.

1 голос
/ 20 января 2010

В ответ на # 7 версия вашего компилятора C ++, вероятно, устарела. Если вам не нужна переносимость Linux / Posix, я бы переключился на не-Cygwin MinGW GCC компилятор - вы можете получить 4.4.1 на http://tdragon.net/recentgcc/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...