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. #21
    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
    c'est fait mais cela ne change rien

  2. #22
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Ton probleme est certainement lie a l'utilisation de bibliotheque partagees. Essaie d'ajouter -static a tes options de compilation pour voir si ca arrange les choses.

  3. #23
    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
    ta solution fonctionne et je t'en remrcie. Cependant elle n'est pas apllicable dans mon contexte ; mes sources génèrent des exécutables utilisés par une application utilisée sur des serveurs en production. L'utilisation des librairies statiques alourdie énormément mes exécutables puisque leur taille est multipliée par 100. Il me faut donc pouvoir utiliser les librairies dynamiques.

  4. #24
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par docteurbunny Voir le message
    ta solution fonctionne et je t'en remrcie. Cependant elle n'est pas apllicable dans mon contexte ; mes sources génèrent des exécutables utilisés par une application utilisée sur des serveurs en production. L'utilisation des librairies statiques alourdie énormément mes exécutables puisque leur taille est multipliée par 100. Il me faut donc pouvoir utiliser les librairies dynamiques.
    Malheureusement, ce n'est surement pas possible. Si -static resout le probleme, c'est que les deux systemes sur lequels tu travailles utilisent des versions differentes et incompatibles des bibliotheques partagees.

  5. #25
    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
    C'est de la folie, sur le principe; imagine tu as redhat4, tu évolues vers redhat 5 ( red hat est une distribution commerciale) et tu ne peux plus compiler pour tes clients qui ont des versions antérieures. C'est commercialement invivable pour red hat.

  6. #26
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par docteurbunny Voir le message
    C'est de la folie, sur le principe; imagine tu as redhat4, tu évolues vers redhat 5 ( red hat est une distribution commerciale) et tu ne peux plus compiler pour tes clients qui ont des versions antérieures. C'est commercialement invivable pour red hat.
    Il chargent certainement plusieurs versions d'une meme bibliotheque pour maintenir une compatibilite. Je ne connais pas CentOS, et j'ignore s'ils garantissent que l'ABI est compatible avec RHEL4 et 5. Tu peux utiliser ldd sur tes exec pour voir les bibliotheques partagees qui sont utilisees, leur path et leur adresse. Il est alors peut etre possible de jouer avec LD_LIBRARY_PATH pour pointer vers la version correcte.

  7. #27
    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
    Comment puis je changer la variable LD_LIBRAIRY_PATH ??

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/chemin_vers_lib:/autre_chemin_vers_lib

  9. #29
    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
    centos est la version libre de red hat qui est exactement pareil que redhat; redhat4=centos4,
    redhat5=centos5.

    le problème ne vient pas de ld_library_path car après plusieurs tests, je constate que pour certains utilisateurs, j'ai LD_LIBRARY_PATH=$SQLDIR/lib et d'autres n'ont pas cette variable.
    ce répertoire et son contenu est identique sur les deux seveurs.
    de plus lorsque je compile ma source contenant seulement return 0, cela ne fonctionne pas si elle a été compilée sur red hat 5 alors que cela fonctionne si elle a été compilée sur ubuntu 8.04

  10. #30
    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
    lorsque je vais sur ma machine red hat4 avec un programme issue de la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int main(int argc, char *argv[])
    {
    return(0);
    }
    Si je fais un ldd sur la machine red hat4 du programme compilé pour chaque environement de compilation, j'ai les résultats suivants :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ldd testredhat4.e 
    	libc.so.6 => /lib/tls/libc.so.6 (0x00a4a000)
    	/lib/ld-linux.so.2 (0x00a31000)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ldd testubuntu.e 
    	libc.so.6 => /lib/tls/libc.so.6 (0x00a4a000)
    	/lib/ld-linux.so.2 (0x00a31000)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ldd testcentos5.e 
    /usr/bin/ldd: line 124:  3077 Exception en point flottant   LD_TRACE_LOADED_OBJECTS=1 LD_WARN= LD_BIND_NOW= LD_LIBRARY_VERSION=$verify_out LD_VERBOSE= "$@"
    Les trois programmes correspondent à la même source mais ont été compilé sur des machines différentes ;

  11. #31
    Invité
    Invité(e)
    Par défaut
    libc.so.6 => /lib/tls/libc.so.6 (0x00a4a000)
    /lib/tls/libc.so.6 est-il présent sur la machine générant l'erreur?

  12. #32
    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
    la machine qui génère l'erreur (Redhat4EL) possède bien le fichier /lib/tls/libc.so.6

  13. #33
    Invité
    Invité(e)
    Par défaut
    Ok,

    peux-tu nous montrer les packages liés à glibc sur chacun de tes environnements? RHEL4,RHEL5 et ubuntu.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    rpm -qa | grep -i glibc

  14. #34
    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
    voici le résultat de cette commande pour centos5 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    rpm -qa|grep glibc
    glibc-2.5-24
    glibc-devel-2.5-24
    compat-glibc-headers-2.3.4-2.26
    glibc-headers-2.5-24
    compat-glibc-2.3.4-2.26
    glibc-common-2.5-24
    Pour RedHat4EL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    glibc-2.3.4-2
    glibc-devel-2.3.4-2
    glibc-common-2.3.4-2
    glibc-headers-2.3.4-2
    glibc-kernheaders-2.4-9.1.87
    Pour Ubuntu : je n'ai pas trouvé de paquet glibc mais il semblerais que soit la version 2.7
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /lib/tls/i686/cmov/libc.so.6 -> libc-2.7.so

  15. #35
    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
    aparament il faudrait faire de la cross compilation ; quelqu'un y connait quelque chose avec gcc?
    Personne n'à une idée svp?

  16. #36
    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 Réponse finale
    Alors la les kids vous me décevez ; personne trouve alors je répond à cette grande question :
    Le nouveau compilateur gcc a changé le format des exécutables ; il compile par défaut avec l'option --ash-style=gnu .Cela entraîne de meilleures performances mais une incompatibilité avec les anciennes version de gcc. Le problème apparaît à partir de la version 4.1 et on peut le résoudre afin d'assurer la rétro compatibilité de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -Wl,--hash-style=both $source.c -o $executable
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc -Wl,--hash-style=sysv $source.c -o $executable
    Merci à tout ceux qui se sont penchés sur ce problème

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/12/2008, 09h57
  2. Problème de rapidité d'exécution ou compilation
    Par HASSIOMAR dans le forum Langage
    Réponses: 2
    Dernier message: 17/07/2008, 14h13
  3. Problème exécution programme
    Par nana7 dans le forum C
    Réponses: 12
    Dernier message: 19/05/2008, 12h52
  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, 22h09
  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, 18h25

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