Question

J'essaie de commencer à développer un programme utilisant ncurses sous Linux. Je n'arrive même pas à compiler l'exemple Hello World. Voici le code:

#include <curses.h>

int main()
{         
        initscr();
        printw("Hello, world.");
        refresh();
        getch();
        endwin();
        return 0;
}

Lorsque j'essaie de compiler, je reçois:

hello.c:(.text+0x12): undefined reference to `initscr'

Pour chacune de ces fonctions appelées.

J'ai installé ncurses via apt-get, mais aussi en téléchargeant les sources et en compilant, installant, etc.

J'ai essayé #include à la fois curses.h et ncurses.h .

Que se passe-t-il?

Était-ce utile?

La solution

Avez-vous utilisé l'option -lcurses lors de la création de liens?

L'inclusion des fichiers d'en-tête laisse le code compiler (car le compilateur sait à quoi ressemble l'appel de fonction à partir du fichier .h ), mais l'éditeur de liens a besoin du fichier de bibliothèque pour trouver le code à lier dans votre programme.

Autres conseils

Comme Greg Hewgill l’a dit, vous devez passer -lcurses ou -lncurses pour créer un lien vers la bibliothèque curses.

gcc -o hello hello.c -lncurses

Vous voulez probablement aussi utiliser initscr () et getch () . Une fois ces substitutions effectuées, ce qui précède est compilé pour moi.

Pour toute personne ayant des problèmes similaires: Les arguments -lx, où x est votre bibliothèque, doivent toujours suivre les fichiers source et objet.

J'avais un problème similaire et j'ai trouvé une solution qui m'a aidé, mais qui était légèrement différent des autres réponses publiées ici. J'essayais d'utiliser la bibliothèque de panneaux avec des curses et ma commande de compilation était:

$ gcc -o hello hello.c -lncurses -lpanel

quand j'ai lu les autres réponses, j'étais déconcerté parce que je devais inclure le drapeau -lncurses, mais il n'était toujours pas en cours de compilation et comportait des erreurs similaires à celles que vous obteniez:

$ 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'

J'ai finalement trouvé ma réponse dans le tldp :

  

"Pour utiliser les fonctions de la bibliothèque de panneaux, vous devez inclure panel.h et pour lier le programme à la bibliothèque de panneaux, l'indicateur -lpanel doit être ajouté avec -lncurses dans cet ordre."

Il semble donc que l'ordre soit important lors de l'utilisation des drapeaux de compilation! J'ai essayé de changer d'ordre:

gcc -o hello hello.c -lpanel -lncurses

Cela lui a permis de compiler avec succès. Je sais que vous avez déjà votre réponse, alors j'espère que cela aidera quelqu'un.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top