IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Discussion :

Compiler avec ncurses

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de nl.smart
    Homme Profil pro
    ouvrier
    Inscrit en
    Avril 2019
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : ouvrier
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2019
    Messages : 175
    Par défaut Compiler avec ncurses
    Bonjour,

    Meilleurs vœux pour la nouvelle année, santé et réussite.

    à la recherche d'informations pour faire apparaître du texte en couleur sous linux, je suis arrivé sur la bibliothèque Ncurses et le tutoriel du site.

    https://arnaud-feltz.developpez.com/tutoriels/ncurses/


    https://arnaud-feltz.developpez.com/...ge=premier_pas

    Arrivé à la page ci-dessus, je ne parviens pas à lancer le premier code ci-dessous :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <ncurses.h>
     
    int main(void)
    {    
        initscr();              // Initialise la structure WINDOW et autres paramètres 
        printw("Hello World");  // Écrit Hello World à l'endroit où le curseur logique est positionné
        refresh();              // Rafraîchit la fenêtre courante afin de voir le message apparaître
        getch();                // On attend que l'utilisateur appui sur une touche pour quitter
        endwin();               // Restaure les paramètres par défaut du terminal
     
        return 0;
    }

    J'ai un message d'erreur qui doit provenir du fait que je ne sache pas configurer le compilateur, voir copie d'écran ci-dessous, mon IDE est Qt creator

    Nom : Ncurses_erreur_2020.01.07_03.png
Affichages : 2119
Taille : 203,9 Ko

    L'erreur doit provenir du fait que je ne sache pas où intégrer le paramètre ci-dessous pourtant mentionné dans le tutoriel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -lncurses -o HelloWorld HelloWorld.c
    Vous remerciant par avance pour vos lumières.

  2. #2
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 160
    Par défaut
    Il semblerait que tu utilises Qt. Dans ce cas, il te faut ajouter la bibliothèque ncurses le le fichier .pro, quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LIBS += -L/usr/lib -lncurses
    Un utilisateur Qt confirmera ou non.

    Et vu que tu utilises Qt, tu as peut-être des classes toute faites pour faire ce que tu as besoin.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  3. #3
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 633
    Par défaut
    Citation Envoyé par chrtophe Voir le message
    Il semblerait que tu utilises Qt.
    non, en fait, il utilise QtCreator, qui n'est qu'un EDI comme un autre, au même titre que Code::Blocks, VisualStudio (windows only) ou Geany (linux only)...

    Comme il n'y a rien qui nous oblige explicitement à utiliser Qt avec QtCreator, tout va pour le mieux dans le meilleur des mondes

    Dans ce cas, il te faut ajouter la bibliothèque ncurses le le fichier .pro, quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LIBS += -L/usr/lib -lncurses
    Ca, par contre, c'est tout à fait vrai, si ce n'est que le dossier /usr/lib est, a priori, déjà bien connu de l'éditeur de liens (et est par conséquent inutile)
    Et vu que tu utilises Qt, tu as peut-être des classes toute faites pour faire ce que tu as besoin.
    Sauf erreur de ma part, il n'y a aucun support de ncurses dans Qt, ce qui est tout à fait normal, vu que Qt et ncurses poursuivent des objectifs tout à fait similaires: fournir une (sorte d') interface graphique à l'utilisateur.

    La seule différence entre les deux, c'est que Qt va utiliser le gestionnaire de fenêtre pour présenter cette interface graphique, alors que ncurses utilisera la console pour ce faire, ce qui lui donne forcément un aspect plus "textuel".

    Il y a, a priori parfaitement moyen de faire communiquer un programme utilisant ncurses avec un programme utilisant Qt en jouant avec les sockets, mais ce n'est décidément pas le but recherché à la base

    @nl.smart

    De manière générale, toutes les erreurs de type undefined reference to sont toujours émises par l'éditeur de liens; c'est à dire, par l'outil qui est utilisé, une fois que le compilateur a généré un fichier objet contenant le code binaire exécutable pour chacun des fichiers d'implémentation (*.cpp ou *.c) pour regrouper ces fichier en un exécutable unique.

    Ce genre d'erreur nous indique, en gros, que l'éditeur de liens n'a pas trouvé, parmi les différents fichiers objets et parmi les bibliothèques externes dans lesquelles il a regardé, le code binaire exécutable de la fonction dont il se plaint qu'elle représente une undefined reference (une référence indéfinie, en francais).

    La solution pour corriger le problème est donc, effectivement, de préciser à l'éditeur de liens qu'il doit aussi aller vérifier le contenu de la bibliothèque qui est sensée fournir le code binaire de la fonction en question.

    En dehors de getch, toutes les autres fonctions que tu appelles depuis ta fonction main() sont -- a priori -- des fonctions issues de la bibliothèque ncurses. La solution proposée par crtophe est donc a priori parfaitement correcte

    NOTA: bien que je ne voies aucune objection sur ce point, il est assez bizarre d'utiliser QtCreator, qui est connu pour être un EDI fortement dépendant d'un framework imposant et, qui plus est écrit en C++ (à savoir Qt) pour développer des projets ... en C.

    Je ne critique pas du tout ce choix, sois en bien conscient. Mais, comme tu es sous linux, sache que n'importe quel éditeur de fichiers plats comme gedit, par exemple, est a priori en mesure de te fournir presque toutes les fonctionnalités que tu crois être liées à la notion d'EDI; tout ce qui pourrait te manquer étant... l'outil de description du projet.

    Peut-être aurais tu intérêt à te tourner vers CMake pour cela, car il est de plus en plus utilisé -- y compris sous linux en remplacement des auto-tools, et qu'il présente, en outre, l'énorme avantage d'être parfaitement multi plateformes (il fonctionne aussi bien sous linux que sous windows ou sous mac)
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  4. #4
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 160
    Par défaut
    Sauf erreur de ma part, il n'y a aucun support de ncurses dans Qt, ce qui est tout à fait normal, vu que Qt et ncurses poursuivent des objectifs tout à fait similaires: fournir une (sorte d') interface graphique à l'utilisateur.
    Je pensais à l'aspect Qtcore permettant de faire des applis console. Qt est tellement vaste que je me disais qu'il y avait peut-être des classes s'appuyant sur ncurses, mais n'utilisant pas Qt, ce n'est qu'une supposition.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  5. #5
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 633
    Par défaut
    Citation Envoyé par chrtophe Voir le message
    Je pensais à l'aspect Qtcore permettant de faire des applis console.
    Je t'avouerai honnêtement ne pas avoir pensé à QtCore lors de ma première réponse.

    Et, de fait, à moins de trouver quelques macros définis de part et d'autres (mais de manière différentes), tout ce qui est -- de près ou de loin -- lié à la notion de modèle pourrait même présenter un intérêt certain, bien que nécessitant sans doute d'implémenter de nombreuses fonctions virtuelles pures issues des différentes classes absraites

    Il n'y aurait alors que deux problèmes majeurs à résoudre:

    1- QtCore expose une API C++, alors que ncurses expose a priori une API C. Ce qui risque de nous obliger à créer de nombreux parsers et autres helpers afin d'assurer la communication.

    Ce serait long et fastidieux, mais a priori pas insurmontable

    2- Bien plus embêtant serait sans doute la dépendance automatiquement induite avec les paquets Qt, et donc avec tous les paquets dont Qt depend de manière directe ou indirect lors de l'installation de l'application.

    Pour l'utilisateur de linux "classique" qui a déjà, sans doute, déjà installé un serveur graphique et un gestionnaire de fenêtre quelconque, cela pourrait encore passer au prix d'une simple grimace ...

    Mais pour le gestionnaire d'un serveur qui se verrait contraint d'installer un environnement graphique qui ne lui sert à rien, la pilule risque vraiment d'avoir du mal à passer, qu'en penses-tu
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  6. #6
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 160
    Par défaut
    Je pensais plus à remplacer NCurses par des classes QtCore si il y en a pouvant donner un résultat équivalent, surtout que l'écran de nl.smart montrait QtCreator.

    L'avantage de Qt sera la documentation, celle de NCurses (officielle) étant assez réduite je trouve, l'inconvénient sera la demande d'apprentissage de Qt. Donc je pencherais plutôt pour rester sous NCurses pour un utilisateur n'étant pas programmeur de métier, vu qu'il y a déjà eu un investissement en temps dessus.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Makefile] Compilation avec librairie ncurses
    Par Kerod dans le forum Autres éditeurs
    Réponses: 8
    Dernier message: 13/01/2007, 01h52
  2. Réponses: 1
    Dernier message: 29/10/2003, 12h16
  3. Problemes de compilation avec g++ sous linux
    Par Selimmel dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 19/09/2003, 13h43
  4. [JB9][EJB]Compiler avec Make ou javac ?
    Par _gtm_ dans le forum JBuilder
    Réponses: 4
    Dernier message: 11/07/2003, 15h59
  5. Compilation avec un Makefile
    Par Mau dans le forum GTK+ avec C & C++
    Réponses: 3
    Dernier message: 28/02/2003, 11h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo