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 :

[Makefile] Probleme de Compilation


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 88
    Points : 57
    Points
    57
    Par défaut [Makefile] Probleme de Compilation
    Salut!

    J'ai un gros probleme qui m'ennuie dans mon makefile.

    Voila la tete de la chose

    Code MAKEFILE : 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
    36
     
     
     
    CC=g++
    EXEC=main
    EXTRAINCLUDEPATH=-I/usr/local/Aria/include/ -I/usr/local/include/opencv -I/usr/local/include/ltilib-1.9.15 -I/home/chris/TFE/TestInterface/lib
    EXTRALIBPATH=-L/usr/local/Aria/lib/ -L/usr/local/lib -L/usr/local/lib/ltilib-1.9.15
    EXTRALIBS= -lAria -lArNetworking -lArAKin -lcv -lcxcore -lhighgui -lltid -lltir
     
    EXPATH=/home/chris/ltilib/src
     
    all : $(EXEC)
     
    main : ArmUse.o Capture.o Interface.o MatrixCompute.o Robot.o Thread.o main.o
    	@$(CC) ArmUse.o Capture.o Interface.o MatrixCompute.o Robot.o Thread.o main.o -o main
     
    ArmUse.o: ArmUse.cpp 
    	@$(CC) ArmUse.cpp -c `pkg-config gtkmm-2.4 --cflags --libs` $(EXTRAINCLUDEPATH) $(EXTRALIBPATH) $(EXTRALIBS)
     
    Capture.o: Capture.cpp Capture.h Thread.h
    	@$(CC) Capture.cpp -c `pkg-config gtkmm-2.4 --cflags --libs` $(EXTRAINCLUDEPATH) $(EXTRALIBPATH) $(EXTRALIBS)
     
    Interface.o: Interface.cpp ArmUse.h Capture.h MatrixCompute.h Robot.h
    	@$(CC) Interface.cpp -c `pkg-config gtkmm-2.4 --cflags --libs` $(EXTRAINCLUDEPATH) $(EXTRALIBPATH) $(EXTRALIBS)
     
    MatrixCompute.o: MatrixCompute.cpp
    	@$(CC) MatrixCompute.cpp -c `pkg-config gtkmm-2.4 --cflags --libs` $(EXTRAINCLUDEPATH) $(EXTRALIBPATH) $(EXTRALIBS)
     
    Robot.o: Robot.cpp
    	@$(CC) Robot.cpp -c `pkg-config gtkmm-2.4 --cflags --libs` $(EXTRAINCLUDEPATH) $(EXTRALIBPATH) $(EXTRALIBS)
     
    Thread.o: Thread.cpp 
    	@$(CC) Thread.cpp -c `pkg-config gtkmm-2.4 --cflags --libs` $(EXTRAINCLUDEPATH) $(EXTRALIBPATH) $(EXTRALIBS)
     
    main.o: main.cpp Interface.h
    	@$(CC) main.cpp -c `pkg-config gtkmm-2.4 --cflags --libs` $(EXTRAINCLUDEPATH) $(EXTRALIBPATH) $(EXTRALIBS)

    L'ennui, c'est que le compilateur, il est pas content, et me dit ca :

    Code compilateur : 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
    36
    37
    38
    39
    40
    41
    42
     
     
    chris@Valkirion:~/TFE/TestInterface$ make
    g++: -lgtkmm-2.4: linker input file unused because linking not done
    g++: -lgdkmm-2.4: linker input file unused because linking not done
    g++: -latkmm-1.6: linker input file unused because linking not done
    g++: -lgtk-x11-2.0: linker input file unused because linking not done
    g++: -lpangomm-1.4: linker input file unused because linking not done
    g++: -lcairomm-1.0: linker input file unused because linking not done
    g++: -lglibmm-2.4: linker input file unused because linking not done
    g++: -lsigc-2.0: linker input file unused because linking not done
    g++: -lgdk-x11-2.0: linker input file unused because linking not done
    g++: -latk-1.0: linker input file unused because linking not done
    g++: -lgdk_pixbuf-2.0: linker input file unused because linking not done
    g++: -lm: linker input file unused because linking not done
    g++: -lpangocairo-1.0: linker input file unused because linking not done
    g++: -lfontconfig: linker input file unused because linking not done
    g++: -lXext: linker input file unused because linking not done
    g++: -lXrender: linker input file unused because linking not done
    g++: -lXinerama: linker input file unused because linking not done
    g++: -lXi: linker input file unused because linking not done
    g++: -lXrandr: linker input file unused because linking not done
    g++: -lXcursor: linker input file unused because linking not done
    g++: -lXfixes: linker input file unused because linking not done
    g++: -lpango-1.0: linker input file unused because linking not done
    g++: -lcairo: linker input file unused because linking not done
    g++: -lX11: linker input file unused because linking not done
    g++: -lgobject-2.0: linker input file unused because linking not done
    g++: -lgmodule-2.0: linker input file unused because linking not done
    g++: -ldl: linker input file unused because linking not done
    g++: -lglib-2.0: linker input file unused because linking not done
    g++: -lAria: linker input file unused because linking not done
    g++: -lArNetworking: linker input file unused because linking not done
    g++: -lArAKin: linker input file unused because linking not done
    g++: -lcv: linker input file unused because linking not done
    g++: -lcxcore: linker input file unused because linking not done
    g++: -lhighgui: linker input file unused because linking not done
    g++: -lltid: linker input file unused because linking not done
    g++: -lltir: linker input file unused because linking not done
    Capture.cpp: In member function ‘std::string Capture::getText(int)’:
    Capture.cpp:101: error: aggregate ‘std::ostringstream oss’ has incomplete type and cannot be defined
    make: *** [Capture.o] Erreur 1

    J'ai donc un fait un fichier principal, main, qui contient toute les autres classes, qui sont comme suit pour l'idée

    Code dans le capture.h : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    #include <cv.h>
    #include <highgui.h>
    #include <stdio.h>
    #include <gtkmm.h>
    #include <string>
    #include <fstream>
     
    #include "Thread.h"
     
    blabla code

    Code dans le .cpp : 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
     
    #include "Capture.h"
     
    /*
     * Constructor. 
     *
     */
    Capture::Capture(Gtk::Image* picture) : 
    							frame(),
    							capture(),
    							keep(true),
    							image()
    {
    	image=picture;
    }
     
    reste du blabla

    j'ai déja retenté de changé le makefile, mais je ne comprends pas pourquoi le lien ne se fait pas au niveau des librairies. La version avec juste les .cpp marchait sans probleme, c'est juste en tentant de le retransformé en orienté objet.

    voila, merci pour un eventuel coup de main ^^

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 626
    Points : 30 684
    Points
    30 684
    Par défaut
    Salut,

    Pour essayer de te mettre sur la voie...

    Es tu sur d'avoir correctement inclu les entete sstream dans Capture.cpp, éventuellement par le jeu des inclusion en chaine

    En effet, la sortie *semble* montrer que la classe std::ostringstream est inconnue au bataillon lors de la tentative de création de Capture.o

    Que te donnerait la simple commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    g++ Capture.cpp \
    -I/usr/local/Aria/include/ -I/usr/local/include/opencv \
    -I/usr/local/include/ltilib-1.9.15 -I/home/chris/TFE/TestInterface/lib \
    -o Capture.o


    Il me semble en effet cohérent de penser que l'édition des liens échoue simplement parce qu'il est déjà impossible de lier Capture.o à main.o, tout cela, parce que Capture.o n'a jamais su etre créé correctement

  3. #3
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    je crois plutot que t'as oublié de faire

    Ca m'est arrivé plein de fois mais avec les fstream

  4. #4
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 626
    Points : 30 684
    Points
    30 684
    Par défaut
    Citation Envoyé par coyotte507
    je crois plutot que t'as oublié de faire

    (snip)
    Pourquoi "plutot", alors que c'est l'essence meme de ce que je lui expliquais :quesiton:

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 88
    Points : 57
    Points
    57
    Par défaut
    euh oui merci, en effet, mais la suite du probleme, il est la :

    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
    36
    37
     
    ++: -lgtkmm-2.4: linker input file unused because linking not done
    g++: -lgdkmm-2.4: linker input file unused because linking not done
    g++: -latkmm-1.6: linker input file unused because linking not done
    g++: -lgtk-x11-2.0: linker input file unused because linking not done
    g++: -lpangomm-1.4: linker input file unused because linking not done
    g++: -lcairomm-1.0: linker input file unused because linking not done
    g++: -lglibmm-2.4: linker input file unused because linking not done
    g++: -lsigc-2.0: linker input file unused because linking not done
    g++: -lgdk-x11-2.0: linker input file unused because linking not done
    g++: -latk-1.0: linker input file unused because linking not done
    g++: -lgdk_pixbuf-2.0: linker input file unused because linking not done
    g++: -lm: linker input file unused because linking not done
    g++: -lpangocairo-1.0: linker input file unused because linking not done
    g++: -lfontconfig: linker input file unused because linking not done
    g++: -lXext: linker input file unused because linking not done
    g++: -lXrender: linker input file unused because linking not done
    g++: -lXinerama: linker input file unused because linking not done
    g++: -lXi: linker input file unused because linking not done
    g++: -lXrandr: linker input file unused because linking not done
    g++: -lXcursor: linker input file unused because linking not done
    g++: -lXfixes: linker input file unused because linking not done
    g++: -lpango-1.0: linker input file unused because linking not done
    g++: -lcairo: linker input file unused because linking not done
    g++: -lX11: linker input file unused because linking not done
    g++: -lgobject-2.0: linker input file unused because linking not done
    g++: -lgmodule-2.0: linker input file unused because linking not done
    g++: -ldl: linker input file unused because linking not done
    g++: -lglib-2.0: linker input file unused because linking not done
    g++: -lAria: linker input file unused because linking not done
    g++: -lArNetworking: linker input file unused because linking not done
    g++: -lArAKin: linker input file unused because linking not done
    g++: -lcv: linker input file unused because linking not done
    g++: -lcxcore: linker input file unused because linking not done
    g++: -lhighgui: linker input file unused because linking not done
    g++: -lltid: linker input file unused because linking not done
    g++: -lltir: linker input file unused because linking not done
    Pour tous mes fichiers il me note ca, mais termine la compilation de chaque objet séparément. Par contre, apres j'ai droit que toute mes fonction dans toute mes classe sont des référence indéfinie, et la compilation général plante.

    koala01, j'ai mis ta fonction dans mon main, mais il me mettait : *** séparateur manquant . Arrêt.
    . Par contre, j'ai tenté de le mettre directement dans la console, et ca me sort ca.

    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
     
    chris@Valkirion:~/TFE/TestInterface$ g++ Capture.cpp -I/usr/local/Aria/include/ -I/usr/local/include/opencv -I/usr/local/include/ltilib-1.9.15 -I/home/chris/TFE/TestInterface/lib -o Capture.o
    In file included from Capture.cpp:1:
    Capture.h:18:19: error: gtkmm.h: Aucun fichier ou répertoire de ce type
    Capture.h:32: error: ‘Gtk’ has not been declared
    Capture.h:32: error: expected `)' before ‘*’ token
    Capture.h:38: error: ‘Gtk’ has not been declared
    Capture.h:38: error: ISO C++ forbids declaration of ‘Image’ with no type
    Capture.h:38: error: expected ‘;’ before ‘*’ token
    Capture.cpp:8: error: ‘Gtk’ has not been declared
    Capture.cpp:8: error: expected `)' before ‘*’ token
    Capture.cpp: In member function ‘virtual void Capture::runCapture()’:
    Capture.cpp:40: error: ‘Gtk’ has not been declared
    Capture.cpp:40: error: expected `;' before ‘tmp’
    Capture.cpp:76: error: ‘image’ was not declared in this scope
    J'ai tenté ensuite de rajouté le pkg config

    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
     
     
    chris@Valkirion:~/TFE/TestInterface$ g++ Capture.cpp `pkg-config gtkmm-2.4 --cflags --libs` -I/usr/local/Aria/include/ -I/usr/local/include/opencv -I/usr/local/include/ltilib-1.9.15 -I/home/chris/TFE/TestInterface/lib -o Capture.o
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/crt1.o: In function `_start':
    (.text+0x18): référence indéfinie vers « main »
    /tmp/ccwUurT5.o: In function `Capture::runCapture()':
    Capture.cpp:(.text+0x44d): référence indéfinie vers « cvCreateCameraCapture »
    Capture.cpp:(.text+0x4b5): référence indéfinie vers « cvQueryFrame »
    Capture.cpp:(.text+0x53d): référence indéfinie vers « cvSaveImage »
    Capture.cpp:(.text+0x554): référence indéfinie vers « cvQueryFrame »
    Capture.cpp:(.text+0x613): référence indéfinie vers « cvSaveImage »
    Capture.cpp:(.text+0x708): référence indéfinie vers « cvReleaseCapture »
    /tmp/ccwUurT5.o: In function `Capture::Capture(Gtk::Image*)':
    Capture.cpp:(.text+0x76d): référence indéfinie vers « Threads::Threads()»
    /tmp/ccwUurT5.o: In function `Capture::Capture(Gtk::Image*)':
    Capture.cpp:(.text+0x7b9): référence indéfinie vers « Threads::Threads()»
    collect2: ld returned 1 exit status
    Bref, j'ai l'impression que je fais un mauvais linkage des fichier que ca soit interne ( mes fonction de mes classes) ou bien externe, mais je vois pas ou.

  6. #6
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    ah koala dsl j'avais pas lu ton post en entier.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Décembre 2006
    Messages : 271
    Points : 329
    Points
    329
    Par défaut
    Quand tu crées les .o à partir des .cpp, il ne faut pas spécifier --libs dans pkg-config ni les flags suivants :
    EXTRALIBPATH=-L/usr/local/Aria/lib/ -L/usr/local/lib -L/usr/local/lib/ltilib-1.9.15
    EXTRALIBS= -lAria -lArNetworking -lArAKin -lcv -lcxcore -lhighgui -lltid -lltir


    Dans la section main du Makefile, il faut par contre les ajouter.

    Je ferai le Makefile comme ceci (il est fort possible que je me trompe) :

    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
     
    CC=g++
    EXEC=main
    EXTRAINCLUDEPATH=-I/usr/local/Aria/include/ -I/usr/local/include/opencv -I/usr/local/include/ltilib-1.9.15 -I/home/chris/TFE/TestInterface/lib
    EXTRALIBPATH=-L/usr/local/Aria/lib/ -L/usr/local/lib -L/usr/local/lib/ltilib-1.9.15
    EXTRALIBS= -lAria -lArNetworking -lArAKin -lcv -lcxcore -lhighgui -lltid -lltir
     
    EXPATH=/home/chris/ltilib/src
     
    all : $(EXEC)
     
    main : ArmUse.o Capture.o Interface.o MatrixCompute.o Robot.o Thread.o main.o
    	@$(CC) ArmUse.o Capture.o Interface.o MatrixCompute.o Robot.o Thread.o main.o -o main $(EXTRALIBS) $(EXTRALIBPATH) `pkg-config gtkmm-2.4 --libs`
     
    ArmUse.o: ArmUse.cpp 
    	@$(CC) ArmUse.cpp -c `pkg-config gtkmm-2.4 --cflags` $(EXTRAINCLUDEPATH)
     
    Capture.o: Capture.cpp Capture.h Thread.h
    	@$(CC) Capture.cpp -c `pkg-config gtkmm-2.4 --cflags` $(EXTRAINCLUDEPATH)
     
    Interface.o: Interface.cpp ArmUse.h Capture.h MatrixCompute.h Robot.h
    	@$(CC) Interface.cpp -c `pkg-config gtkmm-2.4 --cflags` $(EXTRAINCLUDEPATH) )
     
    MatrixCompute.o: MatrixCompute.cpp
    	@$(CC) MatrixCompute.cpp -c `pkg-config gtkmm-2.4 --cflags` $(EXTRAINCLUDEPATH)
     
    Robot.o: Robot.cpp
    	@$(CC) Robot.cpp -c `pkg-config gtkmm-2.4 --cflags` $(EXTRAINCLUDEPATH)
     
    Thread.o: Thread.cpp 
    	@$(CC) Thread.cpp -c `pkg-config gtkmm-2.4 --cflags` $(EXTRAINCLUDEPATH)
     
    main.o: main.cpp Interface.h
    	@$(CC) main.cpp -c `pkg-config gtkmm-2.4 --cflags` $(EXTRAINCLUDEPATH)

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 88
    Points : 57
    Points
    57
    Par défaut
    Un Grand Merci ! ^_^

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

Discussions similaires

  1. Probleme de compilation avec Makefile et Oracle V10
    Par miketidy dans le forum Linux
    Réponses: 2
    Dernier message: 10/09/2008, 09h48
  2. [JSP & TAGLIB] Probleme de compilation
    Par GesMo dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 17/05/2004, 15h03
  3. Probleme de Compilation de la STL
    Par stoluup dans le forum MFC
    Réponses: 3
    Dernier message: 05/05/2004, 17h25
  4. [TP]Probleme de compilation sous TP7
    Par yffick dans le forum Turbo Pascal
    Réponses: 7
    Dernier message: 18/12/2003, 20h32
  5. Problemes de compilation avec g++ sous linux
    Par Selimmel dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 19/09/2003, 13h43

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