Как использовать рыбные раковины в Cygwin?

7766
muriloq

Можно ли использовать раковину рыбы с Cygwin? Я не смог скомпилировать исходный код в cygwin, и я не нашел никаких предварительно скомпилированных пакетов. Есть ли веская причина не иметь рыбу в cygwin?

15

3 ответа на вопрос

23
muriloq

fish shell 2.1.0 официально поддерживается в Cygwin, его можно установить с помощью установщика по умолчанию.

15
Shawn Chin

Вот как мне удалось собрать рыбу в Cygwin.

Шаг 1: Убедитесь, что все зависимости установлены

Сначала убедитесь, что у нас есть следующие пакеты cygwin:

  • libncurses-devel
  • libiconv
  • autoconf (на самом деле это не зависимость от рыбы, но она понадобится нам на более позднем этапе)

Шаг 2: Загрузите и извлеките последний источник

Затем загрузите последний источник с http://fishshell.com (я использовал fish-1.23.1.tar.gz ). Извлеките исходный код в каталог по вашему выбору и перейдите к нему:

$ tar zxvf fish-1.23.1.tar.gz -C /usr/local/src/ $ cd /usr/local/src/fish-1.23.1/ 

Шаг 3: Изменить, configure.acчтобы удалить проверки дляiconv

Теперь по какой-то причине ./configureне может обнаружить libiconvдолжным образом. Чтобы обойти проблему, мы убираем проверку для нее (позже мы укажем lib вручную). Для этого мы редактируем configure.acи удаляем чеки на iconv_open. Поиск iconv_openвыявил 3 случая; мы их все комментируем. Итак, из:

AC_SEARCH_LIBS( iconv_open, iconv, ....) 

Мы меняем на:

#AC_SEARCH_LIBS( iconv_open, iconv, ....) 

Шаг 4: восстановить и запустить ./configure

Далее мы перестраиваем ./configureскрипт, запустив и autoconfзапустив скрипт configure:

$ autoconf && ./configure 

Шаг 5: Изменить, Makefileчтобы включить правильный путь кcurses.h

Я столкнулся с еще одной проблемой curses.h- gcc не смог ее найти. Быстрый поиск показал, что он в /usr/include/ncurses.

У Makefileнего есть жестко закодированный путь включения CFLAGS, но он указывает на /usr/local/include/ncursesнего.

Итак, мы редактируем Makefileи меняем:

CFLAGS = -I/usr/local/include/ncurses -std=c99 .... 

в

CFLAGS = -I/usr/include/ncurses -std=c99 ... 

Шаг 6: Экспорт LDFLAGSпо ссылке libiconv, и мы готовы скомпилировать / установить.

Наконец, мы экспортируем необходимые LDFLAGSссылки iconv, затем компилируем и устанавливаем!

$ export LDFLAGS="-liconv" $ make && make install 

наслаждаться fish

$ fish Welcome to fish, the friendly interactive shell Type help for instructions on how to use fish me@home /u/l/s/fish-1.23.1>  
+1 Я могу подтвердить, что вышеуказанные шаги должны работать. Я также добавил `#define HAVE_NCURSES_H 1` в сгенерированный заголовочный файл` config.h` (по тем же причинам, что указаны выше) Amro 12 лет назад 0
Я установил libiconv и установил LDFLAGS, но все равно получаю ошибку: set_color.c: 16: 20: curses.h: такого файла или каталога нет. Set_color.c: в функции `translate_color ': set_color.c: 116: warning : неявное объявление функции `strcasecmp 'set_color.c: в функции` main': set_color.c: 333: ошибка: `ERR 'необъявлена ​​(первое использование в этой функции) muriloq 12 лет назад 0
Я тоже видел эту ошибку изначально. Вы установили `libncurses-devel` и изменили измененный путь` -I` в `Makefile (шаг 5)? Shawn Chin 12 лет назад 0
Да, я даже переустановил libncurses-devel снова, просто чтобы быть уверенным. Возможно, есть еще одна зависимость, которая уже присутствовала в вашей системе? В поисках сообщения об ошибке я нашел следующий отчет об ошибке: http://sourceforge.net/tracker/?func=detail&aid=928085&group_id=1523&atid=101523 muriloq 12 лет назад 0
@muriloq Похоже, что `curses.h` не включен (здесь определено` ERR`). Можете ли вы взглянуть на `/ usr / include / ncurses /` и посмотреть, есть ли там? Shawn Chin 12 лет назад 0
0
Maciej Matys

Check fish issues #680 and #319 at GitHub, there is everything You need to compile fish on cygwin.

Ссылки на внешние ресурсы приветствуются, но, пожалуйста, добавьте контекст вокруг ссылки, чтобы ваши коллеги-пользователи имели представление о том, что это такое и почему оно есть. Всегда указывайте наиболее релевантную часть важной ссылки, если целевой сайт недоступен или постоянно недоступен. Ashildr 10 лет назад 2