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 :

Problème de bibliothèque dans un code ultra-simple


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Par défaut Problème de bibliothèque dans un code ultra-simple
    Bonjour

    Travaillant habituellement avec codeblock, j'essaie de me remettre à la compilation en ligne de commande.
    J'ai un problème avec le code basique que je teste, qui, à l'execution, me retourne "undefined reference to `sqrt'". Serait-ce un problème de librairie ?

    Voici donc mon fichier main.c :
    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
    #include <math.h>
    #include <stdio.h>
    #include <stdlib.h>
     
    int main()
    {
        int i;
        double n;
        printf("Hello world!\n");
     
        i=2;
        n=sqrt(i);
        printf("n=%e",n);
        return 0;
    }
    Mes commandes sont les suivantes :

    gcc -c main.c

    et

    gcc -o EXE -lm main.o (-lm pour avoir accès aux librairies mathématiques)

    Qu'est ce qui manque d'après vous ?

    Merci,
    L.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 495
    Par défaut
    Hello,

    C'est étrange. Ça devrait fonctionner en l'état et ça compile très bien chez moi avec les commandes que tu précises ici.

    De plus, est-ce vraiment à l'exécution ou seulement à la compilation que tu obtiens ce message ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Par défaut
    J'ai manqué de précision :
    c'est à la deuxième étape de compilation (c'est à dire : lors de gcc -o EXE -lm main.o), l'executable ne se créant pas.

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 495
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 495
    Par défaut
    Quelle version de GCC utilises-tu ? (avec gcc -v).

    Il se peut que l'ordre dans lequel tu passes tes paramètres influe. Essaie de déplacer -o EXE en fin de ligne puis, si ça ne fonctionne toujours pas, de faire passer -lm après main.o.

    D'autre part, tu n'es pas obligé de faire de la compilation séparée : tu peux directement écrire gcc main.c -lm -o EXE. Bien que cela ne résolve pas le problème ci-dessus, peux-tu nous dire si ça fonctionne de cette façon ?

    Enfin, il est possible que le compilateur ne voie pas par défaut les dépôts des bibliothèques concernées, mais ce serait très étonnant car il s'agit quand même des bibliothèques standard, voire même le minimum syndical exigible.

    — Avec quel système d'exploitation travailles-tu ?
    — Est-ce que tu obtiens d'autres messages d'erreur que celui signalé ?
    — Lorsque tu tapes alias dans ta ligne de commande, existe-t-il une ligne concernant gcc ?
    — Que donnent which gcc et ls -l `which gcc` ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Par défaut
    c'est la version 4.7.2 de gcc que j'utilise.

    Je me lance tout de suite dans les tests que tu proposes...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    124
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2010
    Messages : 124
    Par défaut
    ' gcc -lm main.o -o EXE ' --> ne marche pas

    gcc main.o -lm -o EXE --> OK !
    gcc -o EXE main.o -lm --> re OK !
    gcc main.c -lm -o EXE --> encore OK !!

    Bon, il semblerait que la version de gcc que j'ai n'accepte pas n'importe quel ordre de commande (ce qui est bizare parcequ j'avais recopié cet ordre sur un tuto..) Est-ce vraiment quelque chose de surprenant ?
    (pour info, mon OS est Linux sur Ubuntu 12.10 secure Remix.)

    L.

Discussions similaires

  1. Problème try-catch dans mon code
    Par little pepito dans le forum Langage
    Réponses: 7
    Dernier message: 11/06/2007, 12h22
  2. Réponses: 16
    Dernier message: 18/10/2006, 22h52
  3. Probléme de transparence dans le code.
    Par Rifton007 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 16/07/2006, 20h40
  4. Problème de paramètres dans mon code javascript
    Par cocacollection dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 15/03/2006, 10h53
  5. Problème avec Between dans un code
    Par Sendo dans le forum Access
    Réponses: 4
    Dernier message: 02/10/2005, 18h44

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