2011-06-30 55 views
13

Tôi vừa khám phá ra những ncurses và mới bắt đầu học nó, tuy nhiên các ví dụ trong hướng dẫn của tôi không biên dịch trên máy tính của tôi.Không thể biên dịch mã C/C++ đang sử dụng ncurses

Tôi phải cài đặt ncurses theo cách thủ công và làm như vậy bằng cách nhập "apt-get install libncurses5-dev libncursesw5-dev". Tôi đã phải làm điều này bởi vì trước khi làm như vậy tôi nhận được một lỗi nói rằng tôi không thể "#include".

Cài đặt nó làm việc, nhưng bây giờ tôi nhận được lỗi này thay vì:

[email protected]:~/learning_ncurses$ g++ -o hello_world hello_world.cpp 
/tmp/ccubZbvK.o: In function `main': 
hello_world.cpp:(.text+0xa): undefined reference to `initscr' 
hello_world.cpp:(.text+0x16): undefined reference to `printw' 
hello_world.cpp:(.text+0x1b): undefined reference to `refresh' 
hello_world.cpp:(.text+0x20): undefined reference to `stdscr' 
hello_world.cpp:(.text+0x28): undefined reference to `wgetch' 
hello_world.cpp:(.text+0x2d): undefined reference to `endwin' 
collect2: ld returned 1 exit status 

Code tôi biên soạn trông như sau:

#include <ncurses.h> 
int main(){ 
    initscr(); 
    printw("Hai thar world..."); 
    refresh(); 
    getch(); 
    endwin(); 

    return 0; 
} 

Tại sao tôi nhận được lỗi này. Và thậm chí quan trọng hơn, làm thế nào để sửa lỗi này?

Trả lời

30

bạn phải liên kết các thư viện ncurses

g++ -o hello_world hello_world.cpp -lncurses 
+0

Tôi khá mới để C++ nên khái niệm này là mới đối với tôi. Tôi có luôn luôn phải làm điều này bất cứ khi nào tôi đang sử dụng một thư viện không có trong trình biên dịch? – Touzen

+3

Có. Tệp tiêu đề cho phép mã của bạn biên dịch bằng cách khớp một khai báo hàm cho các cuộc gọi trong mã của bạn. Công việc của nhà liên kết là tìm * mã thực thi * cho mọi chức năng được sử dụng trong chương trình của bạn, và bằng cách chỉ định tên thư viện đóng gói tại thời gian liên kết (cũng như các tệp đối tượng cho mã của riêng bạn). –

+0

Chính xác - bạn cần phải liên kết đến tất cả các thư viện, ngay cả các thư viện chuẩn. –

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