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

GCC Discussion :

gcc et math.h (je sais, ça a déjà été posé mais..)


Sujet :

GCC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 16
    Points : 10
    Points
    10
    Par défaut gcc et math.h (je sais, ça a déjà été posé mais..)
    Bonjour,

    Je suis (presque) complètement débutante en programmation et j'ai un problème (logique !)
    J'ai déjà parcouru un peu le forum (fait des recherches) mais ça n'a pas résolu mon problème....

    Je m'explique :

    J'ai écrit un "code" qui utilise la librairie math.h (et aussi iostream et fstream sachant que pour iostream, c'est temporaire... le temps de trouver comment faire autrement)

    Le problème :

    Lorsque je compile avec gcc, j'ai soit une série interminable d'insultes, soit lorsque je retire le ".h" de math.h l'erreur suivante :
    tmp/ccie1EHJ.o: dans la fonction « main »:
    trucmuche.cpp: (.text+0x26): référence indéfinie vers « sin »
    collect2: ld a retourné 1 code d'état d'exécution
    Remarque :
    A l'époque où j'ai eu quelques cours de C++, on nous avait dit que lorsqu'on avait une série d'insultes lors de la compilation, c'est qu'il fallait retirer le ".h" de certaines librairies. Et effectivement, à l'époque, ça marchait (mais ce n'était pas math.h qui m'insultait dans ce cas). C'est pour ça que j'ai essayé de compiler sans le ".h" de math.h.

    Une solution :

    J'ai trouvé sur le forum je crois, une solution très simple qui consiste à écrire la ligne de compilation suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -lm -o truc 030507.cpp
    En voyant ça, j'ai tout de suite essayé..... mais ça ne change pas grand chose...
    Avec le ".h" ---> j'ai la série d'insultes;
    Sans le ".h" ---> j'ai la réponse suivante :
    050307.cpp:1:16: erreur: math : Aucun fichier ou répertoire de ce type
    050307.cpp: In function ‘int main()’:
    050307.cpp:41: erreur: ‘atan’ was not declared in this scope

    Le truc :

    J'ai essayé d'écrire un programme très simple qui ne fait que calculer un sinus. Le seul include de ce programme, c'est le math.h

    Lorsque je tape la ligne de compilation avec "-lm", ça marche. Aucune insulte, et il reconnait bien math.h.
    De plus, pas plus tard que ce matin, j'ai recompilé un programme assez complexe (pas écrit par moi bien sûr...) à partir de son makefile et je n'ai pas eu de problème avec le math.h

    Le programme qui me pose problème reprend certaines fonctions du programme complexe que j'ai compilé ce matin, pour le reste, ce sont essentiellement des gestions de flux.
    Le includes présents dans mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #include <math.h>
    #include <iostream>
    #include <fstream>
    Bon, comme moi je suis plutôt débutante... je ne sais pas quoi faire.

    Est-ce que ça peut venir non pas de math.h mais des deux autres librairies (qui ne sont présentes ni dans le code tout pourri qui m'a servi à tester la méthode avec le -lm et ni dans le programme complexe qui n'est pas de moi ?

    J'espère que vous saurez m'éclairer ... En attendant, j'espère avoir été assez claire dans ce que je raconte..

    Hibiscuit

  2. #2
    Membre actif Avatar de lun4t1k
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    276
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 276
    Points : 274
    Points
    274
    Par défaut
    Un peu long ce post :s je suis pas llé jusqu'a la fin mais essaie donc de compiler avec g++ au lieu de gcc !

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 16
    Points : 10
    Points
    10
    Par défaut
    Oui, je sais que c'est long.....

    Je vais essayer avec g++ (et maintenant que tu le dis, c'était g++ que j'utilisais lors de mes cours de C++.... mais j'ai la mémoire courte...)
    Je ferai ça demain... mon pc est au boulot.
    Je dirai ensuite si ça fonctionne ou non.

    Merci !!

    Hibiscuit

  4. #4
    Membre actif Avatar de lun4t1k
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    276
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 276
    Points : 274
    Points
    274
    Par défaut
    no soucy, bonne nuit!

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Lis l'erreur, comprends l'erreur, et applique la solution.
    Il ne faut pas faire des "recettes" à base de j'essaie d'enlever un .h ou que sais-je.

    L'éditeur de liens dit qu'il ne trouve pas le symbole sin. Cela signifie tout simplement que la bibliothèque mathématique n'est pas liée. Pour la lier, c'est -lm.
    Sache néanmoins qu'en C++, elle est déjà liée par défaut, contrairement à C.
    Boost ftw

  6. #6
    Membre actif
    Inscrit en
    Décembre 2003
    Messages
    272
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 272
    Points : 284
    Points
    284
    Par défaut
    En C++, c'est :
    #include <cmath>
    donc sans le .h, mais avec un c devant, car c'est une bibliothèque C qui a été adaptée au C++.

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

Discussions similaires

  1. getch() avec gcc
    Par Jorus dans le forum Autres éditeurs
    Réponses: 5
    Dernier message: 16/12/2002, 14h47
  2. Réponses: 1
    Dernier message: 13/11/2002, 20h34
  3. Problème de math....
    Par zdra dans le forum Mathématiques
    Réponses: 6
    Dernier message: 11/11/2002, 10h59
  4. [Kylix] gcc et kylix
    Par alexsmadja dans le forum EDI
    Réponses: 1
    Dernier message: 28/05/2002, 10h00
  5. Maths : équations
    Par Anonymous dans le forum Mathématiques
    Réponses: 5
    Dernier message: 02/05/2002, 16h41

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