Compilation Linux vs Windows

Salut les gens,

Je suis en train de faire un interprèteur d’expressions numériques et il faut donc que je puisse utiliser des fonctions inclues dans math.h comme pow() ou fmod().
Je fais donc un dans mon source.
Quand je compile sous windows (mingw) avec gcc -Wall etc… ca marche.
Quand je compile sous Mandriva Free 2007 il faut que mette gcc -Wall -lm etc… (sinon erreur lors de l’utilisation de pow() et fmod())
Pourquoi ce linkage n’est pas automatique sous linux (et comment faire pourqu’il le soit)?
Est-ce a cause de mes variables d environnement qui ne sont pas configurées sous Mandriva?

Questions de débutant je l’admets, mais une réponse serait fortement appréciée!!!

Merci.

D.

Un exemple de code pour aider?

car là on peut pas trop juger ce qui ne va pas…

$ man 3 fmod

[code]FMOD(3) Linux Programmer’s Manual FMOD(3)

NAME
fmod, fmodf, fmodl - floating-point remainder function

SYNOPSIS
#include <math.h>

   double fmod(double x, double y);
   float fmodf(float x, float y);
   long double fmodl(long double x, long double y);

   Link with -lm.[/code]

Tu dois le faire, c’est tout. Si une compilation foire, alors fais man 3 fonctionBizarre, ça aide souvent.

En ce qui concerne la réponse à ta question existentielle, peut-être que le gcc de minGW se sert d’autotools light qui vont chercher les librairies nécessaires tout seuls, ce qu’un outil de geek barbu mal rasé comme GCC 4 Linux ne fait pas B)

Au fait, si je ne m’abuse, c’est
#include <math.h>

/me n’aime pas utiliser des fonctions mathématiques faisant appel à des logarithmes (puissances) si il traite des entiers

[edit] TwinSide, un exemple de code (ptet buggé, ça fait longtemps que j’ai pas fait de C)

#include <stdio.h> #include <math.h> int main(void) { int a; int b; double c; a = 3; b = 6; c = pow(a,b); printf("%d ** %d = %f \n",a,b,c); return 0; }

Ca devrait compiler sans le switch -lm sous Windows, mais sous Linux, juste avec le switch -lm

Un exemple de code est pas trop nécessaire ici.

[quote=“Jojosan, post:3, topic: 31932”]/me n’aime pas utiliser des fonctions mathématiques faisant appel à des logarithmes (puissances) si il traite des entiers
[edit] TwinSide, un exemple de code (ptet buggé, ça fait longtemps que j’ai pas fait de C)
Ca devrait compiler sans le switch -lm sous Windows, mais sous Linux, juste avec le switch -lm
Un exemple de code est pas trop nécessaire ici.[/quote]
C’est gentil tout plein mais je demandais à voir le bout de code qui ne compilais pas B)

-lm obligatoire, voila tout.

Sinon, en GNU/Linux, on fait des Makefile pour automatiser la compilation selon les modifications de fichiers et les dépendances qui les lient. -lm dans le Makefile, et hop.

Je trouve ça rigolo que ce soit gcc linux qui soit mis comme fautif, et pas son penchant windows (mingw) alors que c’est ce dernier qui va faire des trucs dans ton dos pour que ça marche sans rien te dire et alors qu’en théorie ton truc compile pas.

Si tu utilises la fonction d’une librairie, tu link avec cette librairie, point.

Re-salut les gens,

Premièrement, merci pour vos réponses;
man semble être assez utile, j’avais pas vu la partie “Link with -lm”… effectivement.

Sinon, pour mon include, j’avais bien mis #include <math.h> dans mon source et pas

Enfin, oui j’utilise un makefile, mais si dans le makefile je ne dis pas d’utiliser -lm, ca ne change rien au probleme!
Mon makefile est le suivant:
#----------------------------
FLAGS = -Wall -lm
CC = gcc $(FLAGS)
all : evalexp
evalexp : evalexp.c evalexp.h decoupage.c
[TAB] $(CC) -o evalexp decoupage.c evalexp.c
#----------------------------

Voili voilou, encore merci beaucoup.

D.

[quote=“Darakiss, post:7, topic: 31932”]Re-salut les gens,

Premièrement, merci pour vos réponses;
man semble être assez utile, j’avais pas vu la partie “Link with -lm”… effectivement.

Sinon, pour mon include, j’avais bien mis #include <math.h> dans mon source et pas

Enfin, oui j’utilise un makefile, mais si dans le makefile je ne dis pas d’utiliser -lm, ca ne change rien au probleme!
Mon makefile est le suivant:
#----------------------------
FLAGS = -Wall -lm
CC = gcc $(FLAGS)
all : evalexp
evalexp : evalexp.c evalexp.h decoupage.c
[TAB] $(CC) -o evalexp decoupage.c evalexp.c
#----------------------------

Voili voilou, encore merci beaucoup.

D.[/quote]
Idée en l’air : t’a pas moyen de savoir si t’es sous winwin ou nunuche dans ton makefile ? Un truc un peu genre : if(winwin) FLAGS = -Wall else FLAGS = -lm ?

Mais euh, sinon, je suis en train de penser, si tu met -lm sous win, il te met un message d’erreur ? Si c’est pas le cas, limite tu t’en fout non ?

-lm sous win ca passe quand meme, sans warning ni erreur
mais c vrai que sinon vaut mieux utiliser les conditions dans le pré-processeur.

D.