Nicht definierte Referenz, wenn ncurses unter Linux
Frage
Ich versuche, ein Programm zu entwickeln beginnen mit ncurses auf Linux. Ich kann nicht einmal das Hallo Welt Beispiel zu kompilieren bekommen. Hier ist der Code:
#include <curses.h>
int main()
{
initscr();
printw("Hello, world.");
refresh();
getch();
endwin();
return 0;
}
Wenn ich zu kompilieren versuchen, erhalte ich:
hello.c:(.text+0x12): undefined reference to `initscr'
Für jede dieser genannten Funktionen.
Ich installierte ncurses über apt-get und auch durch die Quellen herunterzuladen und zu kompilieren, installieren, etc.
Ich habe versucht #include
sowohl curses.h
und ncurses.h
.
Was ist da los?
Lösung
Haben Sie die -lcurses
Option bei der Verknüpfung?
einschließlich den Header-Dateien des Code Kompilierung lassen (weil der Compiler weiß, was der Funktionsaufruf wie aus der .h
Datei aussieht), aber der Linker muss die Bibliotheksdatei den eigentlichen Code zu finden, in das Programm zu verbinden.
Andere Tipps
Wie Greg Hewgill sagte, müssen Sie die Flüche Bibliothek zu verknüpfen in -lcurses
oder -lncurses
passieren.
gcc -o hello hello.c -lncurses
Sie meinen wahrscheinlich auch initscr()
und getch()
zu verwenden. Sobald ich diese Ersetzungen machen, stellt die oben für mich.
Für alle, die ähnliche Probleme: -lx Argumente, wobei x Ihrer Bibliothek ist, sollte immer die Quelle folgen und Objekt-Dateien.
Ich war ein ähnliches Problem und eine Lösung gefunden, die mir geholfen haben, aber es war etwas anders als die anderen Antworten hier gepostet. Ich habe versucht, die Platten-Bibliothek mit Flüchen zu verwenden und meine Kompilierungsbefehl war:
$ gcc -o hello hello.c -lncurses -lpanel
, wenn ich die anderen Antworten las, war ich verwirrt, weil ich lag bei , einschließlich der -lncurses Flagge, aber es war immer noch nicht kompiliert, und mit ähnlichen Fehler, was Sie bekommen:
$ gcc -o hello hello.c -lncurses -lpanel
/usr/lib/gcc/i686-linux-gnu/4.7/../../../../lib/libpanel.a(p_new.o): In function `new_panel':
p_new.c:(.text+0x18): undefined reference to `_nc_panelhook'
Schließlich fand ich meine Antwort in die TLDP :
„Platten-Bibliotheksfunktionen nutzen zu können, müssen Sie panel.h aufzunehmen und das Programm mit Platten Bibliothek der Flagge zu verbinden -lpanel zusammen mit -lncurses in dieser Reihenfolge hinzugefügt werden soll.“
So scheint es, dass wichtig ist, wenn die Kompilierung Fahnen mit! Ich habe versucht Umschalten der Reihenfolge:
gcc -o hello hello.c -lpanel -lncurses
Dies erlaubt es erfolgreich zu kompilieren. Ich weiß, dass Sie schon Ihre Antwort haben, so dass ich hoffe, dass dies jemand hilft.