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

Outils Discussion :

Utilisation d'une bibliothèque C


Sujet :

Outils

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2009
    Messages : 22
    Par défaut Utilisation d'une bibliothèque C
    Bonjour ,

    J'essaie actuellement d'utiliser une librairie en C dans un projet QT en C++.

    J'ai ajouté à mon .pro les librairies libml et libhe (les chemins includepath et libs sont en vrai en dur)
    Code qt : 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
    QT       += core gui
    QT       += opengl
     
    TARGET = morphing-meshes
    TEMPLATE = app
     
    SOURCES += main.cpp\
            cmainwindow.cpp \
        caffichage.cpp \
        myqglwidget.cpp
     
    HEADERS  += cmainwindow.h \
        caffichage.h \
        myqglwidget.h
     
    FORMS    += cmainwindow.ui
     
    INCLUDEPATH += $$quote(.\gmtools\he\inc\) \
            $$quote(.\gmtools\ml\inc\)
     
    win32:LIBS += $$quote(.\gmtools\ml\lib\libml.a) \
                $$quote(.\gmtools\he\lib\libhe.a)

    Elles sont donc un ensemble de fonctions écrites en C, mais lorsque je veux les utiliser j'ai un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [...]\icp-build-desktop-Qt_4_7_4_for_Desktop_-_MinGW_4_4__Qt_SDK__Debug\..\ICP\cmainwindow.cpp:30: erreur : undefined reference to `heMesh_New()'
    Le code entier est un peu long à donner, mais j'ai bien sûr ajouté l'inclue <he.h> dans cmainwindow.cpp.
    J'ai vu en cherchant sur internet un truc du genre:
    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    extern C {
    //...
    }
    qui pourrait avoir rapport à mon cas mais je n'ai pas trouvé comment l'utiliser.

    Si vous avez une idée ou si vous voulez plus de précisions sur mon problème je vous en remercie

    Cordialement,

    Inouee

  2. #2
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Par défaut
    Bonjour,

    Sauf erreur de ma part, il manque -lml et -lhe dans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    win32:LIBS += $$quote(.\gmtools\ml\lib\libml.a) \
                $$quote(.\gmtools\he\lib\libhe.a)
    =>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    win32:LIBS += $$quote(.\gmtools\ml\lib\libml.a) -lml \
                $$quote(.\gmtools\he\lib\libhe.a) -lhe
    Je fais peut-être erreur du fait que je ne connaisse pas ces libs, mais il me semble que c'est cela.

    EDIT : quoi que, ce n'est en fait pas ça vu que le problème ne se situe pas au linkage. Vous devez avoir des problèmes d'include de vos headers de lib.

    Bonne continuation,
    Amnell.
    N'oubliez pas de consulter la FAQ Qt ainsi que les cours et tutoriels C++/Qt !

    Dernier article : Débuter avec les Enlightenment Foundation Libraries (EFL)
    Dernières traductions : Introduction à Qt Quick - Applications modernes avec Qt et QML
    Vous cherchez un livre sur Qt 5, Qt Quick et QML ? Créer des applications avec Qt 5 - Les essentiels

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2009
    Messages : 22
    Par défaut
    Bonjour,

    J'avais effectivement modifié parl a suite le .pro en ajoutant ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INCLUDEPATH += "S:\Master\ImageMed\Imagemed icp\ICP\gmtools\he\inc" \
            "S:\Master\ImageMed\Imagemed icp\ICP\gmtools\ml\inc"
     
    win32:LIBS += -L"S:\Master\ImageMed\Imagemed icp\ICP\gmtools\ml\lib" -lml -L"S:\Master\ImageMed\Imagemed icp\ICP\gmtools\he\lib" -lhe
    Mais je me retrouvait effectivement avec le même problème.

    Ces deux petites libs sont un ensemble de fonctions qu'un prof/ancien étudiant a créé et qu'on pouvait prendre pour nos Tps.
    Il y avait un Makefile qui compilait le tout et j'ai donc toutes les sources. J'avais essayé avant ça d'inclure directement tous les .h et .c dans le projet et j'avais le même problème, ce pourquoi j'avais essayé d'inclure les .a

    Voici un extrait de ce Makefile, tous les flags présents ne me parlent pas et en supprimer certains peux faire foirer la compilation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    # -------------------------------------------------------------------
    # Compiler and flags
    # -------------------------------------------------------------------
    CC			= gcc
    CFLAGS		= -ansi -pedantic -D_GNU_SOURCE -W -Wall -Werror -Wno-unused-parameter -ggdb3
    INCPATH		= -I. -I$(INCDIR) -I$(INCDIR)/$(PROJECT) -I$(GMTOOLS)/ml/inc -I$(GMTOOLS)/he/inc
    LIBPATH		= -L$(GMTOOLS)/ml/lib -L$(GMTOOLS)/he/lib
    LDFLAGS		= -lhe -lml -lm
    Se pourrait-t-il qu'il y ait certaines options à reprendre afin de pouvoir bien compiler?

    Merci

    Inouee

  4. #4
    Rédacteur
    Avatar de Amnell
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2009
    Messages
    1 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 840
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CC			= gcc
    CFLAGS		= -ansi -pedantic -D_GNU_SOURCE -W -Wall -Werror -Wno-unused-parameter -ggdb3
    INCPATH		= -I. -I$(INCDIR) -I$(INCDIR)/$(PROJECT) -I$(GMTOOLS)/ml/inc -I$(GMTOOLS)/he/inc
    LIBPATH		= -L$(GMTOOLS)/ml/lib -L$(GMTOOLS)/he/lib
    LDFLAGS		= -lhe -lml -lm
    Les CFLAGS ici ne correspondent qu'à une amélioration des messages du compilateur (plus de warnings, warnings considérés comme des erreurs, etc.) ainsi qu'à des notions de norme (-ainsi, -pedantic). -D_GNU_SOURCE correspond à une mise au standard GNU (jamais utilisé, je ne saurais en dire plus sans faire de recherches) et -ggdb3 permet d'utiliser gdb pour trouver d'éventuelles segfaults, par exemple. Les INCPATH permettent de faire une inclusion des headers n'importe où dans le code sous forme de #include <header.h> dans vos fichiers sources. Pour les LDFLAGS, -lhe et -lml sont les libs que vous souhaitez utiliser et -lm, la lib à inclure pour profiter de la lib math en C. Tout cela étant bien entendu associé à la variable LIBPATH pour indiquer où sont les lib lhe et lml.

    Avec les messages complets de compilation et le Makefile complet, il serait possible d'aller plus loin dans l'analyse. À moins que ces informations soient suffisantes pour régler votre problème, je vous invite à les poster.

    Bonne continuation,
    Amnell.
    N'oubliez pas de consulter la FAQ Qt ainsi que les cours et tutoriels C++/Qt !

    Dernier article : Débuter avec les Enlightenment Foundation Libraries (EFL)
    Dernières traductions : Introduction à Qt Quick - Applications modernes avec Qt et QML
    Vous cherchez un livre sur Qt 5, Qt Quick et QML ? Créer des applications avec Qt 5 - Les essentiels

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2009
    Messages : 22
    Par défaut
    Bonjour,

    Je viens de trouver une solution:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    extern "C" {
    #include <he.h>
    }
    Tadam.... Ce simple ajout a permis de régler le problème, je l'avais évoqué précédemment mais je ne l'utilisait pas correctement.

    En vous remerciant pour vos conseils,

    Inouee

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2009
    Messages : 22
    Par défaut
    Bonsoir,

    Je reviens vers vous car j'essaye maintenant d'inclure une autre librairie mais j'ai encore un problème... Décidemment

    J'ai ajouté les classes de la lib LibICP dans mon projet, mais lorsque j'inclus un header dans une de mes classes j'obtiens:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    erreur : [debug/moc_cmainwindow.cpp] Error 1
    Autant dire que la recherche d'une solution à cette erreur n'est pas aisée, les cas que je trouve ne correspondent pas. Elle utilise boost pour le Kdtree mais pas de problème du côté de boost, juste ça..

    En espérant que vous pourrez encore une fois m'éclairer,

    Inouee

Discussions similaires

  1. Réponses: 6
    Dernier message: 28/07/2010, 16h26
  2. Cas d'utilisation dans une bibliothèque (simple)
    Par z980x dans le forum Cas d'utilisation
    Réponses: 9
    Dernier message: 29/09/2008, 19h55
  3. PB : Utilisation d'une Bibliothèque de Modèles
    Par Pascool dans le forum SharePoint
    Réponses: 9
    Dernier message: 18/02/2008, 19h10
  4. [DOM] Utilisation d'une bibliothèque de tri avec appel AJAX
    Par GreatDeveloperOnizuka dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 08/02/2008, 11h09
  5. Réponses: 8
    Dernier message: 07/12/2005, 11h18

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