problème #include <math.h>
Je deviens fou ;) Depuis hier je n'arrive pas à utiliser une fonction de math.h (floor). J'ai un exemple test.c qui l'utilise et qui fonctionne. Parallèlement, j'ai progressivement réduit mon petit prog problématique dice.c à presque rien, y compris il inclut directement ce dont il a besoin (au lieu de passer par mon toolkit habituel) et n'a même plus de header associé. Ce qui fait qu'au final les 2 exemples sont proches. Mais je n'arrive toujours pas à utiliser floor dans dice.c, et je ne vois pas où est la différence qui l'empêche. Voici:
Code:
1 2 3 4 5 6 7 8
| // test.c
#include <stdio.h>
#include <math.h>
int main () {
printf ("floor 1.1 : %f\n", floor(1.1)) ;
return 1 ;
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| // dice.c
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
typedef unsigned int uint ;
uint random_ordinal (uint max) {
const float RANDOM_MAX = (float)(RAND_MAX) + 1 ;
float random_01 = (float)(rand ()) / RANDOM_MAX ;
return 1 + (uint)(floor(max * random_01)) ;
}
int main () {
printf ("random ordinal max 3 : %d\n", random_ordinal(3)) ;
return 1 ;
} |
Code:
1 2 3 4 5 6 7 8 9
| spir@ospir:~/prog/C/WELLRandom$ gcc -c test.c -o test.o
spir@ospir:~/prog/C/WELLRandom$ gcc test.o -o test
spir@ospir:~/prog/C/WELLRandom$ ./test
floor 1.1 : 1.000000
spir@ospir:~/prog/C/WELLRandom$ gcc -c dice.c -o dice.o
spir@ospir:~/prog/C/WELLRandom$ gcc dice.o -o dice
dice.o: In function `random_ordinal':
dice.c:(.text+0x4b): undefined reference to `floor'
collect2: ld returned 1 exit status |
Voilà, je poste ce message au risque de passer pour un imbécile, mais c'est peut-être moins imbécile que de rester coincé pour ne pas passer pour un imbécile... et là, je suis complètement coincé :(. Ca doit être une idiotie terriblement stupide, dites-moi.
Merci,
denis
ajouter -lm en ***fin*** de ligne de commande à l'édition de liens
Voilà, toruvé sur internet, tout est dans le titre:
Code:
1 2 3 4
| spir@ospir:~/prog/C/WELLRandom$ gcc -c dice.c -o dice.o
spir@ospir:~/prog/C/WELLRandom$ gcc dice.o -o dice -lm
spir@ospir:~/prog/C/WELLRandom$ "./dice"
random ordinal max 3 : 3 |
PS: J'aimerais bien savoir ce qui justifie ce traitement spécial de math.h, et s'il y en a d'autres come ça (des modules de la lib std, ou d'autres libs). [Alors, je marque pas encore la discussion "résolue" pour 24 h, au cas où certains auraient plus d'infos concrètes, et puis ça servira pê à d'autres.]
Merci à vous,
denis