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

Linux Discussion :

problème exécution programme compilé


Sujet :

Linux

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 41
    Points : 23
    Points
    23
    Par défaut problème exécution programme compilé
    Bonjour, j'ai récement migré de Redhat4EL vers Centos5 (équivalent de Redat5EL) et je me trouve face à un grave problème de compatibilité. Mes programes C compilés sous Centos5 ne sont pas compatibles avec les systèmes RedHat4 (ou dérivés) ; lorsquej'exécute mon programme compilé sour Centos5 tout fonctionne.
    Sous les systèmes plus anciens, j'ai le message suivant : "exeption de point flottant".

  2. #2
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    ton code est mauvais car tu as utilisé des fonctions ou méthodes "platform-specific".

    Un bon code n'est pas forcément un code simple ou un code generant un binaire petit mais un code portable et efficace par définition.

    Un code portable, bien écrit donc est tjrs efficace et en plus il est esthétique et facile à comprendre/debugguer...

    presentes ton code dans les forum C et demande de l'aide sur les fonctions concernés.

    En plus tu commets une très grossière erreur dans ton code :
    il génére une erreur avec un message système, que tu n'interceptes pas pour la commenter et donner plus d'info ne serait ce que sur l'endroit du code ou ça plante (au minimum)...

    Si tu as plusieurs programmes comme ça .... il va te falloir corriger beaucoup de choses, bon courage....


    Une piste à envisager, c'est peut etre tout simplement une float à convertir en double ou autre definition de variable ....

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 41
    Points : 23
    Points
    23
    Par défaut
    Aucun rapport, voici une source simple de prog.c:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <stdio.h>
    /* mwmwmwmwmwmwmwmwmwmwm mwmwmwmwmwmwmwmwmwmwmwm mwmwmwmwmwmwmwmwmwmw */
    int main(int argc, char *argv[])
    {
    register i = 0;
     
    while (--argc)
        {
        printf("%d: %s\n", ++i, *(++argv));
        }
    puts("A tchao ...");
    return(0);
    }

    je le compile tout simplement sous Centos 5 :
    Je l'exécute sous Centos 5 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    /tmp/prog.e kid
    1: kid
    A tchao ...
    et lorsque je l'exécute sous un red-hat 4, voila le résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    /tmp/prog.e 
    Exception en point flottant

  4. #4
    Membre confirmé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Points : 616
    Points
    616
    Par défaut
    Pourrais-tu mettre les balises de code s'il te plait.

    C'est bizarre, t'as écris
    au lieu de
    et ça marche quand même.

    Essaye cette petite modification pour l'instant, car là je ne vois pas
    de solution a ton problème.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 41
    Points : 23
    Points
    23
    Par défaut
    voila c'est fait

  6. #6
    Invité
    Invité(e)
    Par défaut
    Salut,

    pourrais-tu fournir les infos suivantes sur tes deux environnements (CentOS et redhat):

    Procésseurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #cat /proc/cpuinfo
    versions du gcc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #rpm -qa | grep gcc
    Compiler ton code avec les options -ansi et -Wall pour voir s'il n'y a pas plus d'infos.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 41
    Points : 23
    Points
    23
    Par défaut
    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
    cat /proc/cpuinfo 
    processor	: 0
    vendor_id	: GenuineIntel
    cpu family	: 15
    model		: 4
    model name	: Intel(R) Xeon(TM) CPU 3.20GHz
    stepping	: 10
    cpu MHz		: 3192.246
    cache size	: 2048 KB
    physical id	: 0
    siblings	: 2
    core id		: 0
    cpu cores	: 1
    fdiv_bug	: no
    hlt_bug		: no
    f00f_bug	: no
    coma_bug	: no
    fpu		: yes
    fpu_exception	: yes
    cpuid level	: 5
    wp		: yes
    flags		: fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc pni monitor ds_cpl cid cx16 xtpr lahf_lm
    bogomips	: 6387.44
     
    processor	: 1
    vendor_id	: GenuineIntel
    cpu family	: 15
    model		: 4
    model name	: Intel(R) Xeon(TM) CPU 3.20GHz
    stepping	: 10
    cpu MHz		: 3192.246
    cache size	: 2048 KB
    physical id	: 0
    siblings	: 2
    core id		: 0
    cpu cores	: 1
    fdiv_bug	: no
    hlt_bug		: no
    f00f_bug	: no
    coma_bug	: no
    fpu		: yes
    fpu_exception	: yes
    cpuid level	: 5
    wp		: yes
    flags		: fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc pni monitor ds_cpl cid cx16 xtpr lahf_lm
    bogomips	: 6384.07
    Le problème ne vient pas de la car la machine qui compile n'avait pas le problème avant avec RedHat4.
    Cela est surment du a la version de gcc

    Voici ce que me retourne ta commande sur la machine qui compile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    rpm -qa | grep gcc
    libgcc-4.1.2-42.el5
    gcc-4.1.2-42.el5
    Et sur la machine qui ne parvient pas à exécuté le programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    rpm -qa | grep gcc
    gcc-g77-3.4.3-9.EL4
    gcc-c++-3.4.3-22.1
    compat-libgcc-296-2.96-132.7.2
    libgcc-3.4.3-9.EL4
    gcc-java-3.4.3-9.EL4
    gcc4-c++-4.0.0-0.14.EL4
    gcc-3.4.3-22.1
    compat-gcc-32-3.2.3-47.3
    gcc-3.4.3-9.EL4
    gcc4-4.0.0-0.14.EL4
    libgcc-3.4.3-22.1
    compat-gcc-32-c++-3.2.3-47.3

  8. #8
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    oui peut etre des éléments trop peu portable
    comme ton while (--argc) autant il est logique autant c'est cradoc

    d'autant plus que tu ne testes jamais rien à aucun moment...
    tu ne testes pas sa propre lecture avant le printf par exemple ni si tes variables sont bien valorisées avant des les afficher.

    ton i est mal construit en prime ajoutes y un type int ou shortint (je sais plus si short int existe en C)...

    pour ce genre de programme c'est sencé n'avoir pas d'incidence mais c'est porcasse....

    J'ai perdu l'habitude de coder mais quand même....

    vu que c'est le binaire qui ne passe pas d'une machine à l'autre c'est pas un probleme de librairies ou d'install quelconque mais de code.

    si en revanche ça arrivait en compilant sur l'autre machine là je veux bien croire à la limite à une possible liaison entre les paquets configurés ou non sur les plateformes.


    hypotèse aussi aurais tu tout simplement transmis ton binaire par ftp en oubliant de le faire en mode bin ?

    c'est con mais je me suis déjà fait avoir avec plus bête que ça encore....

  9. #9
    Invité
    Invité(e)
    Par défaut
    La compilation avec les option -Wall et -ansi te donne-t-elle des informations supplémentaires?

    http://c.developpez.com/tutgcc/c408.php

  10. #10
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    au premier regard ton code n'as pas l'air mauvais en lui même.

    j'arrive à le compiler même sous AIX avec un vieux gcc et des librairies IBM-potentiellement+ou-modifiées
    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
     
    ZAPHOD4:root # cat >> toto.c
    #include <stdio.h>
    int main(int argc, char *argv[])
    {
            register i = 0;
    while (--argc)
        {
                printf("%d: %s\n", ++i, *(++argv));
        }
    puts("A tchao ...");
    return(0);
    }
    ^D
    ZAPHOD4:root # gcc --version
    gcc (GCC) 3.3.2
    Copyright (C) 2003 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
     
    ZAPHOD4:root # gcc -O3 -Wall toto.c -o toto   
    toto.c: In function `main':
    toto.c:4: warning: type defaults to `int' in declaration of `i'
    ZAPHOD4:root # sed -e "s/\ i\ /\ int\ i\ /" toto.c > toto2.c
    ZAPHOD4:root # gcc -O3 -Wall toto2.c -o toto                
    ZAPHOD4:root # strip toto
    ZAPHOD4:root # ./toto df sdfsfn rze
    1: df
    2: sdfsfn
    3: rze
    A tchao ...
    ZAPHOD4:root # cd - && rm /tmp/toto*
    ZAPHOD4:root #
    mais ça conforte mon hypotèse que les librairies ou version GCC n'ont rien à voir là dedant et que c'est bien le binaire donc le code qui est pas assez portable.

    de plus un test de compilation sur la machine ciblé serai bon aussi
    afin de valider ou infirmer certaines hypotèses....

    ça permettrait d'y voir plus clair

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 41
    Points : 23
    Points
    23
    Par défaut
    fr31, le cobol c'est fini.

    J'ai le même problème avec la source suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int main(int argc, char *argv[])
    {
    return(0);
    }
    Faut-il selon toi effectuer des vérifications dans cette source?

  12. #12
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    Citation Envoyé par docteurbunny Voir le message
    fr31, le cobol c'est fini.
    non d'ailleurs les cobolistes sont les mieux payés actuellement car personne n'en trouve plus et il faut payer pour convaincre les papys de renoncer à la retraite et de bosser pour aider les djeunz à convertir les programmes...

    chez 2 de mes clients c'est le cas et chez au moins 11 clients de la boites sur une 20t'aine...même si je suis pas dans la partie codage j'en entand causer...

    --------

    quant à ton problème poste ici la copie écran de la compilation sur la cible qu'on voit si dans ce cas ça marche si oui alors c'est bien ton code.

    peut etre faire un exit plustot qu'un return....

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 41
    Points : 23
    Points
    23
    Par défaut
    les option -Wall et -ansi ne changent rien

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 41
    Points : 23
    Points
    23
    Par défaut
    Pour frp31 ;
    tous mes programmes compilées par Centos 5 ne sont pas exécutables par Redhat4
    Ces memes souces fonctionnent si elles sont compilés par RedHat4 ; il s'agit manifestement d'un problème de rétrocompatibilité entre les versions de gcc (qui sont différentes.
    Je cherche donc à activer une otion dans gcc permettant cela

  15. #15
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    C'est assez probable oui sinon je vois pas ....

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 41
    Points : 23
    Points
    23
    Par défaut
    Personne n'a jamais migré un serveur de dévelopement de RedHat4EL vers RedHat5EL; c'est pas possible

  17. #17
    Invité
    Invité(e)
    Par défaut
    Sur la machine où tu ne parviens pas à executer tes programmes.
    Je vois plusieurs version de gcc installées.
    ça peut certainement poser de problèmes de conflits

    rpm -qa | grep gcc
    gcc-g77-3.4.3-9.EL4
    gcc-c++-3.4.3-22.1
    compat-libgcc-296-2.96-132.7.2
    libgcc-3.4.3-9.EL4
    gcc-java-3.4.3-9.EL4
    gcc4-c++-4.0.0-0.14.EL4
    gcc-3.4.3-22.1
    compat-gcc-32-3.2.3-47.3
    gcc-3.4.3-9.EL4
    gcc4-4.0.0-0.14.EL4
    libgcc-3.4.3-22.1
    compat-gcc-32-c++-3.2.3-47.3
    Je pense qu'il serait bien de tester en ne laissant qu'une seule version de gcc installée sur ta machine.

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 41
    Points : 23
    Points
    23
    Par défaut
    J'ai le problème sur une machine en production avec la configuration suivante :

    gcc-java-3.4.3-9.EL4
    libgcc-3.4.3-9.EL4
    gcc-3.4.3-9.EL4
    gcc-g77-3.4.3-9.EL4
    compat-libgcc-296-2.96-132.7.2
    compat-gcc-32-3.2.3-47.3
    gcc-c++-3.4.3-9.EL4
    compat-gcc-32-c++-3.2.3-47.3

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 41
    Points : 23
    Points
    23
    Par défaut
    Du nouveau :
    Lorsque je compile un programme sur Ubuntu 8.04 qui a gcc-4.1 tout comme Centos5, cela fonctionne sur une machine redhat4 et sur Centos5.
    Lorsque je compile un programme sur Centos5 cela me crée un binaire qui fonctionne sur Ubuntu8.04.

    Vraiment bizare

  20. #20
    Invité
    Invité(e)
    Par défaut
    Et en retirant les packages compat-*

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/12/2008, 08h57
  2. Problème de rapidité d'exécution ou compilation
    Par HASSIOMAR dans le forum Langage
    Réponses: 2
    Dernier message: 17/07/2008, 13h13
  3. Problème exécution programme
    Par nana7 dans le forum C
    Réponses: 12
    Dernier message: 19/05/2008, 11h52
  4. [BP7] Vitesse d'exécution des programmes compilés Pascal
    Par Transgarp dans le forum Turbo Pascal
    Réponses: 27
    Dernier message: 08/04/2008, 21h09
  5. exécution d'un programme compilé sur une autre machine
    Par haorua1983 dans le forum Administration système
    Réponses: 4
    Dernier message: 09/02/2007, 17h25

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