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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top