Bonjour,
je dois utiliser dans mon projet des fonctions de trigo. Sauf que juste en incluant math.h, les symboles du type atan2 ne sont pas reconnus.
Sur http://www.delorie.com/djgpp/doc/libc/libc_530.html , on me dit qu'il y a deux versions de fonctions mathématiques : une version embarquée dans la libc, et une autre dans la libm. J'ai réussi à utiliser la libm en incluant et en passant à gcc l'option -lm, mais je préfèrerais utiliser la version de la libc, pour ne pas me farcir une dépendance supplémentaire. Mais sans lier la libm, les symboles ne sont pas reconnus... Quelqu'un aurait une solution ?
Je compile avec GCC 4.22 et j'utilise une glibc 2.6.1.
Merci
# Lie avec libm
Posté par JoeltheLion (site web personnel) . Évalué à 3.
# Tu veux des fonctions inline?
Posté par Christophe --- . Évalué à 9.
En fait, la formulation:
"une version embarquée dans la libc, et une autre dans la libm"
est incorrecte. Toutes les fonctions mathématiques sont dans la libm.
Par contre, si tu est pret à faire des concessions sur la précision (théoriquement, en tout cas), au profit de la vitesse (moins théorique), tu peux utiliser les fonctions inline.
Pour ce faire, il faut ajouter les options suivantes lors de la compilation:
-ffast-math -O3
À partir de ce moment, plus besoin de linker la libm, sauf fonction spéciale.
Enfin, je concluerai en disant qu'il ne faut pas t'inquiéter de linker avec la libm, ce n'est pas sale, plein de coders bien le font. D'ailleurs, elle sera déjà en mémoire à cause d'un autre programme, donc...
[^] # Re: Tu veux des fonctions inline?
Posté par liberforce (site web personnel) . Évalué à 2.
AC_CHECK_LIB(m, main,,AC_MSG_ERROR(requires libm, the standard mathematics library))
dans mon configure.ac, mais du coup tous mes exécutables vont lier la libm, même ceux qui n'en ont pas besoin... Alors j'essayais de m'en passer. Effectivement, la perte de précision ne m'impacte pas (j'arrondis les résultats à l'entier le plus proche avec rint), mais par contre je ne sens pas trop le -O3 juste pour ça. J'ai déjà lu qu'au delà de -O2 les optimisations deviennent un peu hasardeuses. Merci en tout cas pour ces précisions :-)
[^] # Re: Tu veux des fonctions inline?
Posté par Christophe --- . Évalué à 3.
Perso, j'évite les autotools comme la peste, bien trops compliqué pour mon petit cerveau usé par le poids des ans...
Ce qui me gêne dans la solution, c'est que:
- autotools, c'est fait pour être portable;
- -ffast-math, c'est gcc only, nettement moins portable;
- les fonctions mathématiques en inline, c'est GNU-libc only, donc peu portable aussi;
- la libm est un peu particulière, et pas obligatoire sur certains systèmes...
Pour bien faire les choses, il faudrait que tu voie comment dans d'autres projet:
- ils traitent le cas particulier de la libm;
- ils définissent les bibliothèques au cas par cas pour les binaires, pour ne pas linker quand c'est inutile.
Sinon pour info, par rapport à la solution que je proposait, la seule option qui t'aurai intéréssé et qui est apportée par le -O3, c'est en fait l'option -finline-functions que tu peux utiliser seule.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.