Jak używać skorupki rybnej w cygwinie?

15

Czy można używać skorupy ryb w połączeniu z cygwinem? Nie byłem w stanie skompilować źródła w cygwin i nie znalazłem żadnych wstępnie skompilowanych pakietów. Czy istnieje dobry powód, by nie mieć ryb w cygwinie?

muriloq
źródło

Odpowiedzi:

23

fish shell 2.1.0 jest teraz oficjalnie obsługiwany w Cygwin, można go zainstalować przy użyciu domyślnego instalatora.

muriloq
źródło
15

Oto jak udało mi się skompilować ryby w Cygwin.

Krok 1: Sprawdź, czy wszystkie zależności są zainstalowane

Najpierw upewnij się, że mamy następujące pakiety cygwin:

  • libncurses-devel
  • libiconv
  • autoconf (nie jest to tak naprawdę zależność ryb, ale potrzebujemy jej na później)

Krok 2: Pobierz i rozpakuj najnowsze źródło

Następnie pobierz najnowsze źródło ze strony http://fishshell.com (użyłem fish-1.23.1.tar.gz ). Wyodrębnij źródło do wybranego katalogu i cd do niego:

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

Krok 3: Edytuj, configure.acaby usunąć czekiiconv

Teraz z jakiegoś powodu ./configurenie można libiconvpoprawnie wykryć . Aby obejść ten problem, usuwamy zaznaczenie go (określimy bibliotekę ręcznie później). W tym celu edytujemy configure.aci usuwamy czeki dla iconv_open. Wyszukiwanie iconv_openujawnia 3 wystąpienia; komentujemy je wszystkie. Więc od:

AC_SEARCH_LIBS( iconv_open, iconv, ....)

Zmieniamy na:

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

Krok 4: Przebuduj i uruchom ./configure

Następnie odbudowujemy ./configureskrypt, uruchamiając go, autoconfa następnie uruchamiamy skrypt konfiguracji:

$ autoconf && ./configure

Krok 5: Edytuj, Makefileaby podać prawidłową ścieżkę docurses.h

Innym problemem, z którym się spotkałem, był problem curses.h- gcc nie mógł go znaleźć. Szybkie wyszukiwanie ujawniło, że jest w środku /usr/include/ncurses.

MakefileMa sztywno zawierać ścieżkę do niego w CFLAGS, ale to wskazuje /usr/local/include/ncurseszamiast.

Tak więc edytujemy Makefilei zmieniamy:

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

do

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

Krok 6: Eksportuj, LDFLAGSaby połączyć libiconv, i jesteśmy gotowi do kompilacji / instalacji.

Na koniec eksportujemy niezbędne LDFLAGSłącze iconv, a następnie kompilujemy i instalujemy!

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

Cieszyć się 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> 
Shawn Chin
źródło
+1 Mogę potwierdzić, że powyższe kroki powinny działać. Dodałem również #define HAVE_NCURSES_H 1do wygenerowanego pliku nagłówka config.h(z tych samych powodów, które podano powyżej)
Amro
Zainstalowałem libiconv i ustawiłem LDFLAGS, ale wciąż pojawia się błąd: set_color.c: 16: 20: curses.h: Brak takiego pliku lub katalogu set_color.c: W funkcji translate_color': set_color.c:116: warning: implicit declaration of function strcasecmp 'set_color.c: W funkcji main': set_color.c:333: error: ERR' niezadeklarowany (pierwsze użycie w tej funkcji)
muriloq
Początkowo też widziałem ten błąd. Czy zainstalowałeś libncurses-develi zmieniłeś zmienioną -Iścieżkę w `Makefile (krok 5)?
Shawn Chin
Tak, nawet dla pewności ponownie zainstalowałem libncurses-devel. Być może istnieje inna zależność, która była już obecna w twoim systemie? Szukam komunikatu o błędzie Znalazłem następujący raport o błędzie: sourceforge.net/tracker/…
muriloq
@muriloq Brzmi jak curses.hnie jest dołączony ( ERRjest tam zdefiniowany). Czy możesz rzucić okiem /usr/include/ncurses/i zobaczyć, czy tam jest?
Shawn Chin,
0

Sprawdź problemy z rybami # 680 i # 319 w GitHub, jest wszystko, czego potrzebujesz, aby skompilować ryby w Cygwin.

Maciej Matys
źródło
2
Zalecane są linki do zasobów zewnętrznych, ale dodaj kontekst wokół linku, aby inni użytkownicy mieli pojęcie, co to jest i dlaczego. Zawsze podawaj najistotniejszą część ważnego linku, na wypadek gdyby strona docelowa była nieosiągalna lub została trwale wyłączona.
Ashildr