Làm thế nào để sử dụng vỏ cá trong cygwin?


15

Có thể sử dụng vỏ cá với cygwin? Tôi không thể biên dịch mã nguồn trong cygwin và tôi không tìm thấy bất kỳ gói tiền biên dịch nào. Có một lý do tốt cho việc không có cá trong cygwin?

Câu trả lời:


23

vỏ cá 2.1.0 hiện được hỗ trợ chính thức trong Cygwin, có thể cài đặt nó bằng trình cài đặt mặc định.


15

Đây là cách tôi quản lý để biên dịch ở Cygwin.

Bước 1: Kiểm tra xem tất cả các phụ thuộc đã được cài đặt chưa

Trước tiên, hãy đảm bảo chúng tôi có các gói cygwin sau:

  • libncurses-devel
  • libiconv
  • autoconf (không thực sự là một sự phụ thuộc của cá, nhưng chúng ta cần nó cho bước sau)

Bước 2: Tải xuống và trích xuất nguồn mới nhất

Tiếp theo, tải xuống nguồn mới nhất từ http://fishshell.com (Tôi đã sử dụng fish-1.23.1.tar.gz ). Trích xuất nguồn vào thư mục bạn chọn và cd vào nó:

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

Bước 3: Chỉnh sửa configure.acđể xóa kiểm tra choiconv

Bây giờ vì một số lý do, ./configurekhông thể phát hiện libiconvđúng. Để giải quyết vấn đề, chúng tôi xóa phần kiểm tra cho nó (chúng tôi sẽ chỉ định lib theo cách thủ công sau). Để làm như vậy, chúng tôi chỉnh sửa configure.acvà loại bỏ kiểm tra cho iconv_open. Tìm kiếm cho iconv_openthấy 3 sự cố; chúng tôi nhận xét tất cả chúng ra. Từ đó:

AC_SEARCH_LIBS( iconv_open, iconv, ....)

Chúng tôi đổi thành:

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

Bước 4: Xây dựng lại và chạy ./configure

Tiếp theo, chúng tôi xây dựng lại ./configuretập lệnh bằng cách chạy autoconfsau đó chạy tập lệnh cấu hình:

$ autoconf && ./configure

Bước 5: Chỉnh sửa Makefileđể bao gồm đường dẫn chính xác đếncurses.h

Một vấn đề khác tôi gặp phải là curses.h- gcc không thể tìm thấy nó. Một tìm kiếm nhanh cho thấy rằng nó trong /usr/include/ncurses.

Makefilemột mã hóa cứng bao gồm đường dẫn cho nó vào CFLAGS, nhưng nó chỉ đến /usr/local/include/ncursesthay thế.

Vì vậy, chúng tôi chỉnh sửa Makefilevà thay đổi:

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

đến

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

Bước 6: Xuất LDFLAGSđể liên kết libiconvvà chúng tôi đã sẵn sàng biên dịch / cài đặt.

Cuối cùng, chúng tôi xuất cần thiết LDFLAGSđể liên kết iconv, sau đó biên dịch và cài đặt!

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

Thưởng thức 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 Tôi có thể xác nhận các bước trên sẽ hoạt động. Tôi cũng đã thêm #define HAVE_NCURSES_H 1vào tệp tiêu đề được tạo config.h(vì những lý do tương tự đã nêu ở trên)
Amro

Tôi đã cài đặt libiconv và đặt LDFLAGS, nhưng tôi vẫn gặp lỗi: set_color.c: 16: 20: curses.h: Không có tệp hoặc thư mục như vậy set_color.c: Trong chức năng translate_color': set_color.c:116: warning: implicit declaration of function strcasecmp 'set_color.c: Trong chức năng main': set_color.c:333: error: ERR' không được khai báo (lần đầu tiên sử dụng chức năng này)
muriloq

Tôi thấy lỗi đó ban đầu quá. Bạn đã cài đặt libncurses-develvà thay đổi -Iđường dẫn đã thay đổi trong `Makefile (bước 5) chưa?
Shawn Chin

Có, tôi thậm chí còn cài đặt lại libncurses-devel, chỉ để chắc chắn. Có lẽ có một sự phụ thuộc khác đã có trong hệ thống của bạn? Tìm kiếm thông báo lỗi Tôi đã tìm thấy báo cáo lỗi sau: sourceforge.net/tracker/ từ
muriloq

@muriloq Âm thanh như curses.hkhông được bao gồm ( ERRđược xác định ở đó). Bạn có thể có một cái nhìn /usr/include/ncurses/và xem nếu nó ở đó?
Shawn Chin

0

Kiểm tra các vấn đề về cá # 680# 319 tại GitHub, có tất cả mọi thứ Bạn cần để biên dịch cá trên cygwin.


2
Liên kết đến các tài nguyên bên ngoài được khuyến khích, nhưng vui lòng thêm ngữ cảnh xung quanh liên kết để người dùng đồng nghiệp của bạn sẽ có một số ý tưởng về nó là gì và tại sao nó ở đó. Luôn trích dẫn phần có liên quan nhất của một liên kết quan trọng, trong trường hợp trang đích không thể truy cập được hoặc ngoại tuyến vĩnh viễn.
Ashildr
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.