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 :

Appeler des fonctions non C++ dans Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 21
    Par défaut Appeler des fonctions non C++ dans Qt
    Bonjour,

    Je réalise actuellement un projet (traitement des données) réalise donc mes codes de calcul en Fortran.
    Je voudrais savoir comment faire (et si c'est possible, mais ça je pense que oui ) pour par exemple lier mon code C++ Qt avec mon code Fortran.
    En effet, j'ai déja lier des codes de ces deux languages, mais là, je crée ma fenetre avec Qt creator.
    Je créer ma fonction fortran "addition"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    subroutine addition(a,b)
    	implicit none
    	integer, intent(in) :: a,b
    	integer :: addition
    	a = a+b
    end function addition
    Je la compile : gfortran -o addition.f90 pour obtenir un point .o.

    Dans mon code C++ j'ai :


    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
    extern "C"
    {
         void addition_(int*,int *);
    }
     
     
    int main(int argc, char *argv[])
    {
        QApplication app(argc,argv);
        QWidget fenetre;
                int m,n,o;
                n=5;
                o=11;
                addition_(&n,&o);
        fenetre.setFixedSize(200, 100);
        QPushButton m_boutonDialogue("Ouvrir la boîte de dialogue", &fenetre);
        m_boutonDialogue.move(40, 50);
     
                QLCDNumber m_lcd(&fenetre);
                m_lcd.setSegmentStyle(QLCDNumber::Flat);
                m_lcd.move(50, 20);
                m_lcd.display(n);
         fenetre.show();
     
     
        return app.exec();
    }
    Je met le .o fortran dans le même dossier que mon main.cpp.
    Je lance qmake-project, qmake et make all et.... erreur au make all :
    undifined refence to : addition_


    Habituellement, pour un code sans interface graphique cela marche, mais là....
    J'ai fait la même démarche avec un code en C, la même erreur est obtenue...

    Pour plus de précision, j'interface les deux langages exactement comme indiqué sur ce site :

    http://www.cae.tntech.edu/help/progr...ixed_languages


    D'avance merci.

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    qmake -project : as-tu vérifié le .pro, est-ce qu'il n'ignore pas le .o ?

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 21
    Par défaut
    Re-bonsoir,

    Dans le .pro il y a :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ######################################################################
    # Automatically generated by qmake (2.01a) mar. 27. mars 23:52:04 2012
    ######################################################################
     
    TEMPLATE = app
    TARGET = 
    DEPENDPATH += .
    INCLUDEPATH += .
     
    # Input
    SOURCES += main.cpp
     
    OTHER_FILES += \
        test.txt
    J'en déduis que le .o n'est pas prie en compte
    mais ou l'ajouter?

    En gros, j'ai un dossier test que j'irais compiler avec qmake, dedans j'ai mon fichier main.cpp, un testcf.pro et un testcf.pro.user, là je rajoute cpptest.o.
    J'ouvre le fichier testcf.pro et je rajoute cpptest.o à coter de main.cpp?
    (j'ai essayer de compiler.... ca n'a pas marché...)


    Merci

  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
    Bonjour,

    Il va manquer LIBS += votre.o dans le .pro.

    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
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 21
    Par défaut
    Bonsoir,

    J'ai rajouter cette ligne dans le .pro et j'obtiens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Configuration non modifiée, passe l'étape QMake.
    Lancement : /usr/bin/make -w
    make: entrant dans le répertoire « /home/mathieu/test1 »
    g++ -o test1 main.o -L/usr/lib cpptest.o -lQtGui -lQtCore -lpthread
    g++: cpptest.o: Aucun fichier ou dossier de ce type
    make: *** [test1] Erreur 1
    make: quittant le répertoire « /home/mathieu/test1 »
    Terminé avec le code de sortie 2.
    Erreur lors de la compilation du projet test1
    lors de l'éxecution de l'étape 'Make'
    Pour info, je suis sous Linux, vaut-il mieux etre sous windows?

    J'ai essayer pas mal de truc mais.... faut-il plutot modifier le makefile que le .pro?

    Merci beaucoup en tout cas.

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 21
    Par défaut
    Re-bonsoir,


    Ca marche!!!!

    Merci beaucoup

    il fallait rajouter l'emplacement du fichier dans libs :


    et bien sur compiler le bon programme... ca allait faire depuis mon dernier post que je compilais le mauvais truc....


    Enfin bref, je reviendrais sans doute .

    Bonne soirée, je met en résolue.

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

Discussions similaires

  1. Appeler des fonctions listées dans un tableau
    Par MarieNum dans le forum ActionScript 3
    Réponses: 2
    Dernier message: 01/01/2009, 17h31
  2. appelle des fonctions dans une autre
    Par bennkabazz dans le forum Requêtes
    Réponses: 0
    Dernier message: 01/12/2008, 15h40
  3. Réponses: 2
    Dernier message: 19/09/2006, 19h06
  4. appel des fonctions d'un driver dans un programme en c
    Par richie25 dans le forum Windows
    Réponses: 5
    Dernier message: 10/01/2006, 08h27
  5. Appel à des fonctions incluses dans des DLL
    Par Greybird dans le forum Langage
    Réponses: 3
    Dernier message: 26/05/2003, 13h33

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