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

 C++ Discussion :

Livre récent de Stroustrup, FLTK et Linux


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    professeur des universités à la retraite
    Inscrit en
    Août 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : professeur des universités à la retraite

    Informations forums :
    Inscription : Août 2008
    Messages : 364
    Par défaut Livre récent de Stroustrup, FLTK et Linux
    Bonjour à tous.
    Désirant me familiariser avec le C++ j'ai acheté le tout récent ouvrage de Stroustrup, le créateur et mainteneur du C++ :
    Programming, Principles and Practise Using C++ (voir http://www.stroustrup.com/Programming/ ).
    J'ai étudié à fond les onze excellents premiers chapitres. Mais arrivé au douzième, qui aborde les applications graphiques (jusqu'à ce point tout est en console), ça se gâte, les explications données dans le livre pour l'installation des outils graphiques utilisés concernant plutôt Windows... alors que je suis sous une distribution Linux.
    A noter que je me sers simplement de Kate comme éditeur et de g++ comme compilateur, sans IDE.

    Pour introduire la programmation graphique, il est fait usage dans le livre (chap 12 et suivants) de la librairie graphique FLTK, que j'ai installée sans problème.

    A l'Appendice D, p. 1160, $D.5, on trouve ceci :
    Create a sigle new .cpp file in your newly created project and enter the following code. It should compile without problems.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // Fichier essai.cpp
     
    #include <FL/Fl.h>
    #include <FL/Fl_Box.h>
    #include <FL/Fl_Window.h>
     
     
    int main()
    {
    Fl_Window window(200,200,"Window title");
    Fl_Box box(0,0,200,200,"Hello World");
    window.show();
    return Fl::run();
    }
    Ce code se compile sans problème avec :
    (une fois du moins les .h des en-têtes remplacés par des .H !) puis s'exécute correctement.

    Toutefois si je tente d'exécuter des programmes graphiques du livre (chapitres 12 et suivants), rien à faire.
    De quelque façon que je m'y prenne j'obtiens des messages d'erreur.
    Quelqu'un a-t-il réussi à faire fonctionner sous Linux la partie graphique de l'ouvrage ??

    Exemple, le programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    //
    // This is example code from Chapter 12.3 "A first example" of
    // "Programming -- Principles and Practice Using C++" by Bjarne Stroustrup
    //
     
    #include <FL/Fl.H>  // ajouté par ptyxs
    #include <FL/Fl_Box.H> // ajouté par ptyxs
    #include <FL/Fl_Window.H> // ajouté par ptyxs
    #include "Simple_window.h"    // get access to our window library
    #include "Graph.h"            // get access to our graphics library facilitie
     
    //------------------------------------------------------------------------------
     
    int main()
    {
        using namespace Graph_lib;   // our graphics faciqlities are in Graph_lib
     
        Point tl(100,100);           // to become top left  corner of window
     
        Simple_window win(tl,600,400,"Canvas");    // make a simple window
     
        Polygon poly;                // make a shape (a polygon)
     
        poly.add(Point(300,200));    // add a point
        poly.add(Point(350,100));    // add another point
        poly.add(Point(400,200));    // add a third point 
     
        poly.set_color(Color::red);  // adjust properties of poly
     
        win.attach (poly);           // connect poly to the window
     
        win.wait_for_button();       // give control to the display engine
    }
     
    //------------------------------------------------------------------------------
    compilé ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g++ Graph.cpp Window.cpp Simple_Window.cpp chapter.12.3.cpp -lfltk
    donne une erreur de l'éditeur de liens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    toto@tux-laptop:~/Programmes/C++/stroustrup/Chapter12$ g++ Graph.cpp Window.cpp Simple_window.cpp chapter.12.3.cpp -lfltk
    /tmp/ccJSfJON.o: In function `Graph_lib::Image::Image(Point, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, Graph_lib::Suffix::Encoding)':
    Graph.cpp:(.text+0x148f): undefined reference to `Fl_JPEG_Image::Fl_JPEG_Image(char const*)'
    Graph.cpp:(.text+0x14ee): undefined reference to `Fl_GIF_Image::Fl_GIF_Image(char const*)'
    /tmp/ccJSfJON.o: In function `Graph_lib::Image::Image(Point, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, Graph_lib::Suffix::Encoding)':
    Graph.cpp:(.text+0x1883): undefined reference to `Fl_JPEG_Image::Fl_JPEG_Image(char const*)'
    Graph.cpp:(.text+0x18e2): undefined reference to `Fl_GIF_Image::Fl_GIF_Image(char const*)'
    /tmp/ccjDzjsE.o: In function `Graph_lib::Button::~Button()':
    Simple_window.cpp:(.text._ZN9Graph_lib6ButtonD1Ev[Graph_lib::Button::~Button()]+0xb): undefined reference to `vtable for Graph_lib::Button'
    /tmp/ccjDzjsE.o: In function `Graph_lib::Button::Button(Point, int, int, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, void (*)(void*, void*))':
    Simple_window.cpp:(.text._ZN9Graph_lib6ButtonC1E5PointiiRKSsPFvPvS4_E[Graph_lib::Button::Button(Point, int, int, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, void (*)(void*, void*))]+0x40): undefined reference to `vtable for Graph_lib::Button'
    collect2: ld a retourné 1 code d'état d'exécution
    Comment diable compiler correctement les programmes proposés par Stroustrup dans le chapitre 12 et suivants ?

  2. #2
    Membre très actif
    Profil pro
    professeur des universités à la retraite
    Inscrit en
    Août 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : professeur des universités à la retraite

    Informations forums :
    Inscription : Août 2008
    Messages : 364
    Par défaut
    J'ai finalement très laborieusement résolu le problème ainsi :
    Pour compiler, le fichier :
    chapter.12.3.cpp

    J'ai dû :

    - copier les fichiers stroustrup/FLTK/src/Fl_JPEG_Image.cxx et stroustrup/FLTK/src/Fl_GIF_Image.cxx vers le répertoire stroustrup/Chapter12 contenant le fichier à compiler

    - commenter la ligne
    #include <config.h>
    dans stroustrup/Chapter12/Fl_JPEG_Image.cxx

    - copier les fichiers Graph.cpp, GUI.cpp, Simple_window.cpp and Window.cpp vers le répertoire stroustrup/Chapter12

    - ajouter la ligne
    #include <stdlib.h>
    dans GUI.ccp (à cause de atoi)

    - exécuter la commande complexe :

    toto@tux-laptop:~/stroustrup/Chapter12$ g++ -o chapter.12.3 chapter.12.3.cpp Fl_JPEG_Image.cxx Fl_GIF_Image.cxx Graph.cpp GUI.cpp Window.cpp Simple_window.cpp `fltk-config --ldflags --cxxflags`

    Plus simple possible ?

    EDIT Avec ces modif tous les programmes du chapitre 12 compilent. Toutefois impossible qu'ils affichent des images .gif ou .jpeg. J'ai tenté sans succès d'utiliser les différents config.h qui se trouvent dans des sous-dossiers de FLTK/
    Il reste donc une articulation à fournir pour les utilisateurs de Linux/Unix pour le passage du chapitre 11 au chapitre 12. Avis aux amateurs... C'est dommage pour les linuxiens car ce livre me parait tout à fait remarquable... Il suffirait d'un petit quelque chose...

  3. #3
    Membre très actif
    Profil pro
    professeur des universités à la retraite
    Inscrit en
    Août 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : professeur des universités à la retraite

    Informations forums :
    Inscription : Août 2008
    Messages : 364
    Par défaut
    La solution m'a été donnée par robrob.

    Il suffit, pour compiler correctement les programmes du chapitre 12, sans qu'aucune modification ne soit plus requise, d'utiliser des commandes de la forme suivante (en remplaçant si nécessaire 'chapter.12.7.2' par le nom du programme à compiler) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g++ -o chapter.12.7.2 chapter.12.7.2.cpp Graph.cpp GUI.cpp Window.cpp Simple_window.cpp `fltk-config --use-images --cxxflags --ldflags`
    après avoir chargé dans votre répertoire local contenant les programmes du chapitre 12 les .h et .cpp donnés sur le site du livre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wget -r -nd http://www.stroustrup.com/Programming/Graphics/    ./

  4. #4
    Membre Expert

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Par défaut
    Bonjour,
    Juste pour signaler que sur la page de support du bouquin, il y a un lien vers une explication détaillée sur la manière de configurer Ubuntu pour le chapitre 12. (je n'ai pas testé)

  5. #5
    Membre très actif
    Profil pro
    professeur des universités à la retraite
    Inscrit en
    Août 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : professeur des universités à la retraite

    Informations forums :
    Inscription : Août 2008
    Messages : 364
    Par défaut
    En provenance directe de Stroustrup par mail une solution encore plus simple :

    Here are instructions that our students have been using:


    The installation the FLTK on a Linux machine is straightforward
    1. Install the FLTK library (see http://www.fltk.org/)
    yum fltk
    and
    yum fltk-devel
    2. Create the directory GUI above the directory Chapter12
    mkdir GUI
    3. Copy all the files from http://www.stroustrup.com/Programming/Graphics/ to this directory:
    wget -r -nd -nH -PGUI http://www.stroustrup.com/Programming/Graphics/
    3. Compile the files in the directory Chapter12
    make

    By the way, on my web page I have also a link to a document created by one of PTs with instructions how to use the FLTK library on our local CS UNIX server.

    http://docs.google.com/View?docID=dg...vision=_latest

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/10/2014, 08h20
  2. Réponses: 1
    Dernier message: 02/08/2013, 14h46
  3. Livre Récents C++
    Par MotorX dans le forum Livres
    Réponses: 15
    Dernier message: 09/07/2012, 11h10
  4. Blocage sur un exercice du livre de Bjarne Stroustrup
    Par Go'Gaule dans le forum Débuter
    Réponses: 17
    Dernier message: 13/02/2012, 13h23
  5. Newbie : quel livre récent ?
    Par weabow dans le forum Windows Forms
    Réponses: 13
    Dernier message: 19/11/2009, 10h05

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