Tôi đang cố gắng bắt đầu phát triển một chương trình bằng cách sử dụng ncurses trên Linux. Tôi thậm chí không thể lấy ví dụ Hello World để biên dịch. Dưới đây là các mã:Tham chiếu không xác định khi sử dụng ncurses trên linux
#include <curses.h>
int main()
{
initscr();
printw("Hello, world.");
refresh();
getch();
endwin();
return 0;
}
Khi tôi cố gắng để biên dịch, tôi nhận được:
hello.c:(.text+0x12): undefined reference to `initscr'
Đối với mỗi một trong những người được gọi chức năng.
Tôi đã cài đặt ncurses qua apt-get, và cũng có thể bằng cách tải về các nguồn và biên dịch, cài đặt vv
Tôi đã thử #include
cả curses.h
và ncurses.h
.
Điều gì đang xảy ra?
Tại sao '$ gcc -lncurses -o hello hello.c' không hoạt động nhưng' $ gcc -o hello hello.c -lncurses' làm gì? – rootkea
@rootkea Vì trình liên kết hoạt động trên các đối tượng theo thứ tự chúng xuất hiện trong dòng lệnh. Khi nó thấy 'hello' trước, nó nhớ tất cả các ký hiệu cần thiết, và sau đó khi nó nhìn thấy thư viện' ncurses', nó giải quyết những biểu tượng đó bằng cách sử dụng những gì nó tìm thấy. Nếu 'ncurses' xuất hiện đầu tiên, nó sẽ thấy một loạt các biểu tượng nhưng nói" Tôi không cần bất kỳ cái nào trong số đó "và loại bỏ chúng. Xem [tài liệu] (https://gcc.gnu.org/onlinedocs/gcc/Link-Options.html#index-l-1172) hoặc [các nhiệm vụ SO khác] (http://stackoverflow.com/questions/45135/linker-order-gcc) để biết chi tiết. –