IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Problème avec la fonction floor de <math.h>


Sujet :

C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 29
    Points : 25
    Points
    25
    Par défaut Problème avec la fonction floor de <math.h>
    Bonjour,

    je suis sur AIX, en compilant avec xlc.

    j'ai une fonction qui fait appelle aux fonction pow et floor de math.h.

    A la compilation j'ai l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ld: 0711-317 ERROR: Undefined symbol: .__floor
    alors que je ne l'ai pas pour pow.

    L'incluse de math.h est bien présent dans mon source common.c (d'ailleurs pow fonctionne !).

    J'ai bien l'option "-lm" dans mes instructions de compilation (je dis ça car un pb similaire est signalé dans une autre discution).

    Si vous avez des idées ou si vous souhaitez plus d'info pour m'aider, vous n'hésitez pas.

    Merci d'avance....

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 916
    Points
    17 916
    Billets dans le blog
    2
    Par défaut
    est-ce que math.h est bien le dernier include dans la liste des include ?

    est-ce que -lm est bien dans les dernières librairies à utiliser (la plus à droite sur la ligne de compile) ?

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 29
    Points : 25
    Points
    25
    Par défaut
    Oui math;h est bien le denier include. En fait, cet include est dans un common.c, linké à la compil avec mon prog principal. Dois-je le changer d'endroit, sachant que la fonction qui utilise floor est bien dans le common.c ?

    L'option de la compil (-lm) est bien la dernière option citée.

    Merci pour l'aide....

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 916
    Points
    17 916
    Billets dans le blog
    2
    Par défaut
    je dirais dans le noir comme ça qu'il te manque peut-être quelque chose.. Un define ou quelque chose comme ça dans la ligne de commande..

    Tu tournes sur quoi ?

    Quel est ton makefile ?


    Regarde-voir dans ton math.h si floor n'est pas dépendant (normalement non, mais sait-on jamais) d'un ifdef ....

    Sinon poste ton makefile...

  5. #5
    Membre éclairé Avatar de valefor
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    711
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 711
    Points : 790
    Points
    790
    Par défaut
    A tout hasard, as-tu fait man floor ? Parfois ils donnent les headers à inclure, les paramètres à passer au linker, et les éventuels defines.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 29
    Points : 25
    Points
    25
    Par défaut
    Déjà merci pour vos réponses.

    Pour valeflor : le man floor ne donne rien : pas d'aide installée ou existante.

    Pour souviron34 : tu as peut être une piste : si je ne me trompe pas, la fonction floor est liée à un #ifdef dans le math.h, tout comme ceil qui ne marche pas non plus, mais pas comme pow qui fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    #ifdef __MATH__
    #define acos(__x)         __acos(__x)
    #define asin(__x)         __asin(__x)
    #define atan(__x)         __atan(__x)
    #define atan2(__x,__y)      __atan2(__x,__y)
    #define cos(__x)          __cos(__x)
    #define exp(__x)          __exp(__x)
    #define fabs(__x)         __fabs(__x)
    #define log(__x)          __log(__x)
    #define log10(__x)        __log10(__x)
    #define sin(__x)          __sin(__x)
    #define sqrt(__x)         __sqrt(__x)
    #define tan(__x)          __tan(__x)
    #ifdef __IBMC__
    #if (__xlC__ >= 0x0600) /* VAC version 6 and above */
    #define floor(__x)        __floor(__x)
    #define ceil(__x)         __ceil(__x)
    #endif /* __xlC__ >= 0x0600 */
    #endif /* __IBMC__ */
    #endif
    Quelle est la marche à suivre pour que ça rentre dans l'ordre ?

    Sinon, je compile sur un serveur AIX 5.3. Quand nous étions en 5.2 je n'ai pas eu ce soucis sur d'autres prog, et en testant une recompile de ces derniers, j'ai le soucis maintenant... pourtant les biblio sont au même endroit (/usr/include).

    Enfin mon makefile s'il est utile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
     
    # Make the Embedded SQL/C sample programs.
    #
    # Change the following definitions as appropriate for your site:
    # MAKE = make CC="$(CC)" AS="$(AS)" LD="$(LD)" AR="$(AR)" CPP="$(CPP)" SYBPLATFORM="$(SYBPLATFORM)" 
    #
     
    #############################################################################
    #
    # Directories and search paths.
    #
    #############################################################################
     
    SHELL     = /bin/sh
    RELDIR    = $(SYBASE)/$(SYBASE_OCS)
     
    # Sybase include directory
    INCDIR    = $(RELDIR)/include
     
    #
    # Modify the following line to use debug/nondebug libraries
    #
    #LIBDIR   = $(RELDIR)/devlib
    LIBDIR    = $(RELDIR)/lib
     
    # Specify the include and library search paths for the compiler
    INCLUDE   = -I. -I$(INCDIR) -I/usr/include
    LIBPATH   = -L$(LIBDIR)
     
    ##############################################################################
    #
    # Macros for compile/link lines
    #
    ##############################################################################
     
     
    #
    # Define the compiler command and compile flags.
    #
    # `sh sybopts.sh compile` echoes a platform-specific command to invoke the C
    # compiler. You can replace this invocation with the comand to invoke your
    # preferred compiler if you like.
    #
    COMPILE   = `sh sybopts.sh compile` $(INCLUDE) $(LIBPATH)
     
    #
    # Get the name and location of the C precompiler
    #
    PRECOMP   = `sh sybopts.sh precomp`
     
    #
    # Define the list of libraries that must be linked with in order to call
    # Client-Library routines.
    #
    # `sh sybopts.sh comlibs` echoes a platform-specific list of lower-layer
    # Sybase libraries to link with. 'sh sybopts.sh' with argument 'ct' echoes
    # the  Client-Library
    #
     
    ## pour SYBLIBS, il faut ces 2 type de library à cause de l'utilisation de curseurs
    SYBLIBS = `sybopts.sh ct cs` `sybopts.sh comlibs`
    SYSLIBS   = `sh sybopts.sh syslibs`
     
     
     
    OBJECTS=common.c erreur.c gestenv.c fichiers.c locale.c
    BIBLIO=common.h erreur.h gestenv.h fichiers.h locale.h
     
    TARGET1   = J1GFF_charge_GOTIC
     
    all: 	$(TARGET1) $(OBJECTS) $(BIBLIO)
     
    $(TARGET1): $(TARGET1).c sybsqlex.h $(OBJECTS) $(BIBLIO)
    	@ printf "\n\n$(COMPILE) -o $@ $(RELDIR)/include/sybesql.c $(TARGET1).c  $(OBJECTS) $(SYBLIBS) $(SYSLIBS)\n\n";
    	@ $(COMPILE) -o $@ $(RELDIR)/include/sybesql.c $(TARGET1).c  $(OBJECTS) $(SYBLIBS) $(SYSLIBS)
     
    $(TARGET1).c: $(TARGET1).cp
    	@ printf "$(PRECOMP) $(TARGET1).cp\n\n";
    	@ $(PRECOMP) $(TARGET1).cp
    Merci bcp pour vos aides...

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 29
    Points : 25
    Points
    25
    Par défaut
    J'ai trouvé un truc : l'erreur à la compile me dit qu'il ne trouve pas la fonction .__floor au moment du link, or elle est définie en _floor dans math.h (un seul '_' et no pas 2).

    Je me suis amusé, aprés sauvegarde, à modifier le math.h pour ne mettre qu'un seul '_', ça compile.

    Mais bon, je ne suis pas sûr que se soit la bonne solution. Je pense qu'il faut que je mette des librairies à jour suite à ma migration de socle AIX; Y'a des case sur le site d'IBM.

    Reste plus qu'à trouver le bon patch...

    je vous tiens au courant...

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 916
    Points
    17 916
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par moussmouss
    ...
    Quelle est la marche à suivre pour que ça rentre dans l'ordre ?
    ...

    Visiblement ton problème vient de ces 2 lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #ifdef __IBMC__
    #if (__xlC__ >= 0x0600) /* VAC version 6 and above */
    Donc :

    Est-ce bien ce que tu veux : avoir __IBMC__ défini et l'autre aussi ?

    Sinon il faut regarder dans les flags de gcc pour voir quel est le flag à mettre pour ta machine (visiblement ils ont dû modifier des .h et un #define quelque part (un des 2 testés)...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. probléme avec le fonction math.random()
    Par dv-2008 dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 19/03/2008, 20h32
  2. Problème avec la fonction findfirst ()
    Par Angelico dans le forum Windows
    Réponses: 3
    Dernier message: 05/08/2004, 20h40
  3. [Requete SQL en VBA] Problème avec la fonction FLOOR
    Par zubral dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/07/2004, 13h24
  4. Problème avec les fonctions
    Par jvachez dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/01/2004, 12h06
  5. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo