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


15

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

Ответы:


23

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


15

Вот как мне удалось собрать рыбу в 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

Я установил libiconv и установил LDFLAGS, но все равно получаю сообщение об ошибке: set_color.c: 16: 20: curses.h: такого файла или каталога нет. Set_color.c: в функции translate_color': set_color.c:116: warning: implicit declaration of function strcasecmp 'set_color.c: в функции main': set_color.c:333: error: ERR' undeclared (первое использование в этой функции)
muriloq

Я тоже видел эту ошибку изначально. Вы установили libncurses-develи изменили измененный -Iпуть в `Makefile (шаг 5)?
Шон Чин

Да, я даже переустановил libncurses-devel снова, просто чтобы быть уверенным. Возможно, есть еще одна зависимость, которая уже присутствовала в вашей системе? В поисках сообщения об ошибке я обнаружил следующее сообщение об ошибке: sourceforge.net/tracker/…
muriloq

@muriloq Похоже, что curses.hне включен ( ERRопределен там). Можете ли вы /usr/include/ncurses/взглянуть на это и посмотреть, есть ли оно там?
Шон Чин

0

Проверьте проблемы с рыбами # 680 и # 319 на GitHub, там есть все, что вам нужно, чтобы собрать рыбу на cygwin.


2
Ссылки на внешние ресурсы приветствуются, но, пожалуйста, добавьте контекст вокруг ссылки, чтобы ваши коллеги-пользователи имели представление о том, что это такое и почему оно есть. Всегда указывайте наиболее релевантную часть важной ссылки, если целевой сайт недоступен или постоянно недоступен.
Ashildr
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.