Ld rapporte une erreur de reference

brutus -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Si j'essai de compiler le programme suivant avec

gcc sin30.c -o sin30

ld rapporte une erreur disant qu'il ne trouve pas la reference a la fonction sin().
Mais si je remplace les arguments param et pi par leur valeur numerique ca compile sans probleme et le programme s'execute correctement.

/* programme sin30.c */

#include <stdio.h>
#include <math.h>

#define PI 3.14159265

int main ()
{
  double param, result;
  param = 30.0;
  result = sin (param*PI/180.0);
  printf ("The sine of %lf degrees is %lf.\n", param, result );
  return 0;
}


3 réponses

Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Salut.
Il faut ajouter "-lm" lors de l'édition des liens pour utiliser les fonctions mathématiques.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Salut,
Oui il faut utiliser -lm (L minuscule) pour que l'édition des liens se déroule correctement.
De plus, ne met pas %lf pour afficher un double mais seulement %f.

Cdlt
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
%f ce n'est pas pour les float et %lf pour les double ?? Je ne sait jamais.
Pour les double, j'utilise %e qui permet un affichage que je trouve plus lisible.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846 > Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention  
 
%f ce n'est pas pour les float et %lf pour les double ??
Oui. Mais printf en tant que fonction à nombre d'arguments variables, le float sera converti en double. Donc %f dans ce cas désigne plutôt un double. %lf a un comportement indéfini dans printf en C90. En C99, il est accepté pour éviter la confusion, mais il désignera %f.

Cdlt
0
brutus
 
Char Sniper et fiddy vous avez raison en ajoutant -lm ça compile correctement.

Merci de cette réponse rapide.
0