Pb de compilation

Résolu
christouff Messages postés 78 Statut Membre -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

J'ai un problème lorsque je compile on me met:

[sotty@localhost 28-03-08]$ gcc -o readFrame readFrame.o
readFrame.o: In function `main':
readFrame.c:(.text+0x338): undefined reference to `powl'
collect2: ld a retourné 1 code d'état d'exécution

Sachant que je comprend rien de ce qui est écrit.

Merci
Configuration: Linux Mandriva
Firefox 2.0.0.13

2 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Rajoute l'option de compilation -lm. Exemple :
    #include <math.h>
    #include <stdio.h>
    
    int main(){
            printf("%Lf\n",powl(2,8));
            return 0;
    }

    On compile
    gcc -W -Wall -lm plop.c

    Et on exécute :
    (mando@aldur) (~) $ ./a.out
    256.000000
    
    Bonne chance
    0
    1. christouff Messages postés 78 Statut Membre 1
       
      Cool ça marche et en plus je savais pas que l'on pouvais compiler comme cela

      Sinon pourquoi il faut rajouter le -lm

      je suis novice desol

      merci
      0
  2. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Par ce que tu fais appel à une fonction de la librairie math (d'où le lm).

    Les headers (math.h en l'occurrence) sont quand à eux dans un endroits standard donc tout se passe comme si c'était le header standard. Cependant le code source de la fonction n'est pas directement dans la libc, et c'est pourquoi il faut linker ton programme avec la librairie math.

    Ne t'en fais pas on est tous tombés dans le panneau la première fois :-) Ceci dit quand tu tapes :
    man powl

    ... on te rappelle tout (header prototype et linkage) :
    POW(3)                    Manuel du programmeur Linux                   POW(3)
    
    NOM
           pow, powf, powl - Fonction puissance
    
    SYNOPSIS
           #include <math.h>
    
           double pow(double x, double y);
           float powf(float x, float y);
           long double powl(long double x, long double y);
    
           Effectuez l’édition des liens avec l’option -lm.
    ...
    

    Bonne continuation
    0