Je ne comprends pas pourquoi cela jette référence non définie à `étage » « :étage double (time_t)
double curr_time = (double)time(NULL);
return floor(curr_time);
ne l'a pas été casté en double, qui est ce que étage reçoit
? ?Je ne comprends pas pourquoi cela jette référence non définie à `étage » « :étage double (time_t)
double curr_time = (double)time(NULL);
return floor(curr_time);
ne l'a pas été casté en double, qui est ce que étage reçoit
? ?peut-être parce que vous ne liez pas avec la bibliothèque mathématique l'erreur n'a rien à voir avec des moulages et des types de données, btw
Ce que je ne comprends pas, c'est pourquoi, sans lien avec la bibliothèque mathématique, des choses comme floor (1.2) _do_ ont fonctionné. C'est pourquoi je pensais que l'erreur était liée au type de données. – plok
@plok: Peut-être que cela a fonctionné, parce que vous étiez sur un système différent? Parfois, la bibliothèque est liée par défaut. – Lucas
@Lucas: c'était sur le même système, sans rien modifier. J'ai juste essayé avec une déclaration plus simple quand l'erreur a été lancée et vu que l'étage (1.2) fonctionnait. Est-il possible que le résultat soit calculé par gcc au moment de la compilation? – plok
Vous devez probablement lier explicitement à la bibliothèque. Sur un système de type UNIX, ce serait typiquement "/usr/lib/libm.a". La bibliothèque standard C doit être liée par défaut, mais la bibliothèque mathématique ne dépend pas de votre système et vous devrez peut-être lier explicitement. (par exemple sur Mac OS X, il est également lié par défaut sur mon système ubuntu ce n'est pas le cas).
Notez que cela n'a rien à voir avec votre chemin d'inclusion. Si vous êtes sur quelque chose comme UNIX, vous trouverez probablement l'en-tête avec la déclaration du prototype sous "/usr/include/math.h", où votre compilateur recherchera toujours les en-têtes.
Si vous utilisez gcc, vous pouvez soit un lien direct avec:
gcc yourfile.c /usr/lib/libm.a -o out
ou "-l nameroflibrary" comme ceci:
gcc yourfile.c -lm -o out
ce cherchera une bibliothèque le même répertoire que la bibliothèque standard C avec le nom "lib nameoflibrary .a"
Avez-vous # compris? –
zellio
Avez-vous lié la bibliothèque mathématique (par exemple, -lm pour gcc)? Les erreurs de "référence indéfinie" indiquent généralement que le lieur ne peut pas trouver le code objet pour quelque chose. –
Les erreurs de référence non définies proviennent de l'éditeur de liens, l'en-tête manquant devrait être une erreur de compilation. – dirkgently