2009-10-03 33 views
10

Cố gắng để có được getch() làm việc để nắm bắt bấm phím.Tại sao lời nguyền trên linux cho tôi lỗi sau?

#include <curses.h> 
    ... 
    ... 
    WINDOW *w; 
    char f; 

    w = initscr(); 
    timeout(3000); 
    f = getch(); 
    endwin(); 

được đem lại cho tôi lỗi sau: -

undefined reference to `wgetch' 
undefined reference to `stdscr' 

Trả lời

16

Đó là một lỗi liên kết. Bạn đang liên kết đến thư viện curses một cách chính xác?

Có hai bước liên quan trong việc sử dụng một thư viện trong C.

  1. Bạn #include các tập tin tiêu đề có liên quan từ các tập tin nguồn của bạn. Điều này là để mã của bạn biết chữ ký của các hàm thư viện là gì. Vì vậy, bạn đang làm điều này một cách chính xác.
  2. Khi biên dịch mã của bạn, bạn cần yêu cầu trình liên kết liên kết đến các thư viện có liên quan để có thể tìm thấy định nghĩa của các hàm đó. Đây là những gì bạn không làm. Giả sử bạn đang sử dụng gcc sau đó thêm -lncurses vào dòng biên dịch nên thực hiện. Đây là một số explanation of linking.
+1

yes i đã bao gồm curses.h và cũng ncurses.h –

+8

liên kết đến lời nguyền bằng -lncurses tùy chọn –

+0

FWIW, trong tháng 11 năm 2017 nó là tốt hơn để sử dụng 'pkg-config', xem [này] (https://stackoverflow.com/a/47060434/841108) trả lời cho một câu hỏi rất giống nhau. –

Các vấn đề liên quan