Подтвердить что ты не робот

Некоторые проблемы о Cygwin [Linux в Windows] (сокет, поток, другое программирование и проблемы с оболочкой)

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

  • Можно ли использовать Cygwin для разработки кода на основе сокетов?
  • Есть ли у Cygwin функции read() и write(), которые работают с файловыми дескрипторами?
  • Можно ли использовать библиотеку Pthread в Cygwin?
  • Используется ли код, который компилируется в Cygwin компилировать в Linux без каких-либо изменений или с небольшими изменениями?
  • Будет ли исполняемый файл, созданный Cygwin работает в Linux?
  • Почему Cygwin не нуждается в компоновщике опция -lpthread, когда я использую библиотеку pthread?
  • почему в #include <iostream> мне не нужно использовать using namespace std;?
  • Могу ли я работать с QT в Cygwin? Если да, How?
  • Могу ли я загрузить мой Linux в другой
  • с Cygwin и использовать его?
  • Могу ли я получить доступ к другому разделу  это EXT3 в Cygwin?
4b9b3361

Ответ 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 содержит список пакетов.

Ответ 2

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

Убедитесь, что вы устанавливаете все заголовки разработки, которые вам нужны на обеих платформах.

Ответ 3

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

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

Ответ 4

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

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

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

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

8: КонцернOfTunbridgeWells проделал большую работу по разъяснению этого, поэтому мне нечего было сказать. Однако стоит отметить, что Cygwin имеет X Window X Window System в своем списке пакетов. С Cygwin 1.7.x, настраивая его и используя его, это легкий ветерок, и он кажется довольно прочным. Если вы хотите использовать Qt с X, я бы рекомендовал использовать сервер Cygwin X.

Ответ 5

В ответ на # 7 версия компилятора С++, которая у вас есть, вероятно, устарела. Если вам не нужна переносимость linux/posix, я бы переключился на компилятор MinGW GCC без cygwin - вы можете получить 4.4.1 на http://tdragon.net/recentgcc/

Ответ 6

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