2011-06-30 6 views
13

Właśnie odkryłem ncurses i dopiero zacząłem się uczyć, jednak przykłady w moim samouczku nie kompilują się na moim komputerze.Nie można skompilować kodu C/C++, który używa ncurses

Musiałem ręcznie zainstalować ncurses i zrobiłem to, wpisując "apt-get install libncurses5-dev libncursesw5-dev". Musiałem to zrobić, ponieważ przedtem zrobiłem błąd, mówiąc, że nie mogłem "#include".

Instalacja to działało, ale teraz mam ten błąd zamiast:

[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 

Kod Skompilowałem wygląda następująco:

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

    return 0; 
} 

Dlaczego mam ten błąd. A co ważniejsze, jak to naprawić?

Odpowiedz

30

trzeba połączyć bibliotekę ncurses

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

jestem zupełnie nowy na C++ tak pojęcie to jest dla mnie nowe. Czy zawsze muszę to robić, ilekroć używam biblioteki nie uwzględnionej w kompilatorze? – Touzen

+3

Tak. Plik nagłówkowy pozwala na kompilację kodu, dopasowując deklarację funkcji do wywołań w kodzie. Zadaniem łącznika jest znalezienie * rzeczywistego kodu działającego * dla każdej funkcji używanej w twoim programie, a to poprzez określenie enkapsulującej nazwy biblioteki w czasie łącza (jak również plików obiektów dla twojego własnego kodu). –

+0

Dokładnie - musisz połączyć ze wszystkimi bibliotekami, nawet tymi standardowymi. –