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

У меня есть некоторый вопрос о 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?
16
задан Sajad Bahmani 23 February 2013 в 08:08
поделиться

6 ответов

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

2: да. Я думаю, что все системные вызовы «Раздел 2 и 3» в среде выполнения GNU C и библиотеки реализуются rundume Cygwin. Вы можете проверить это на страницах человека, которые поставляются с Cygwin. Может быть найден список системных вызовов и STD Lib Restaverys Cygwin здесь .

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

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

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

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

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

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

8: Да. IIRC QT доступен в стандартных сборках , и он, безусловно, скомпилируется на Cygwin. Как и в случае с Linux / Unix, QT на Cygwin использует бэкэнд X11, поэтому вам нужно будет иметь x Server, такой как XMING .

Чтобы избежать зависимости на сервере X, вы можете пожелать Создание приложений QT против API Win32, . Можно сделать это с Mingw , который является набором файлов и библиотек заголовок для создания собственных приложений Win32 с GCC. Mingw можно использовать из среды Cygwin (пример GCC на Cygwin Cross с компиляцией мишени без Cygwin) и установщик из Cygwin.com дает вам возможность Установка его.

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

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

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

Отредактируйте: Пакеты разработки QT в Cygwin:

  • QT4: Framework Application QT (Источник)
  • QT4-Devel-Tools: QT4 Assistant, Designer и Lingist
  • QT4-DOC: Документация API qt4
  • qt4-qtconfig: qt4 desktop configuration app configuration
  • QT4-QTDEMO: QT4 Demos и примеры

Вы, вероятно, также понадобится GCC4-G ++ и некоторые другие биты и кусочки. Этот список на веб-сайте Cygwin имеет список пакетов.

14
ответ дан 30 November 2019 в 21:54
поделиться

Любой код .NET, включая Windows Forms, использует кодировку Юникод как UTF16. Ваша проблема вряд ли будет проблемой кодирования, которая создает вопросительные знаки вместо квадратов. Получение квадрата означает, что для отображения японского символа используется шрифт, в котором отсутствует необходимый глиф.

С помощью приложения charmap.exe можно узнать, какие глифы поддерживаются используемым шрифтом. Если они отсутствуют, операционная система вынуждена вернуться к заменяющему шрифту и не сможет найти его. Отображение квадратов - это все, что он может сделать. Старая версия операционной системы является очень вероятной причиной этой ошибки, особенно для XP без установки дополнительных восточноазиатских шрифтов.

Обратите внимание, что эта проблема с шрифтами вряд ли будет проблемой на компьютере, который загружает японскую версию Windows. Он должен будет правильно шрифты для отображения японского текста, конечно. Через подписку MSDN можно получить определенные языковые версии Windows. По крайней мере, получите его для сотрудников отдела обеспечения качества, чтобы они могли убедиться, что все работает правильно.

-121--3367031-

Поставщики сертифицированных компиляторов, поддерживающих Linux (в дополнение к перечисленным в вопросе):

Irvine Compiler Corp.

OC Systems

RR Программного обеспечения

Sofcheck

-121--2402921-

Да, да, да

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

2
ответ дан 30 November 2019 в 21:54
поделиться

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

1
ответ дан 30 November 2019 в 21:54
поделиться

Вот функция перемещения вкладки в левую позицию. Поместите его в файл vimrc и установите нужные ключи (чтобы назвать его длинным, : execute TabLeft () ).

Обратите внимание, что эти функции «перекатывают» вкладки от первой к последней и от последней к первой соответственно, поэтому перемещение первой вкладки влево делает ее последней вкладкой, а перемещение последней вкладки вправо делает ее первой вкладкой.

function TabLeft()
   let tab_number = tabpagenr() - 1
   if tab_number == 0
      execute "tabm" tabpagenr('$') - 1
   else
      execute "tabm" tab_number - 1
   endif
endfunction

... и справа

function TabRight()
   let tab_number = tabpagenr() - 1
   let last_tab_number = tabpagenr('$') - 1
   if tab_number == last_tab_number
      execute "tabm" 0
   else
      execute "tabm" tab_number + 1
   endif
endfunction
-121--1611686-

Можно задать свойство Timeout для Smtp Client , а затем обработать все исключения, вызванные вызовом Send . Тогда он не будет блокировать поток, хотя вам придется обработать причину исключения, как вы считаете целесообразным.

-121--4013125-

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

1
ответ дан 30 November 2019 в 21:54
поделиться

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

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

3
ответ дан 30 November 2019 в 21:54
поделиться

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

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

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

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

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

2
ответ дан 30 November 2019 в 21:54
поделиться