Câu trả lời:
Đây là cách tôi quản lý để biên dịch cá ở Cygwin.
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)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/
configure.ac
để xóa kiểm tra choiconv
Bây giờ vì một số lý do, ./configure
khô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.ac
và loại bỏ kiểm tra cho iconv_open
. Tìm kiếm cho iconv_open
thấ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, ....)
./configure
Tiếp theo, chúng tôi xây dựng lại ./configure
tập lệnh bằng cách chạy autoconf
sau đó chạy tập lệnh cấu hình:
$ autoconf && ./configure
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
.
Có Makefile
mộ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/ncurses
thay thế.
Vì vậy, chúng tôi chỉnh sửa Makefile
và thay đổi:
CFLAGS = -I/usr/local/include/ncurses -std=c99 ....
đến
CFLAGS = -I/usr/include/ncurses -std=c99 ...
LDFLAGS
để liên kết libiconv
và 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
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>
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)
libncurses-devel
và thay đổi -I
đường dẫn đã thay đổi trong `Makefile (bước 5) chưa?
curses.h
khô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ó ở đó?
Kiểm tra các vấn đề về cá # 680 và # 319 tại GitHub, có tất cả mọi thứ Bạn cần để biên dịch cá trên cygwin.
#define HAVE_NCURSES_H 1
vào tệp tiêu đề được tạoconfig.h
(vì những lý do tương tự đã nêu ở trên)