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 :

Faire tourner un programme 32 bits sous 64 bits


Sujet :

C

  1. #1
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 752
    Points
    1 752
    Par défaut Faire tourner un programme 32 bits sous 64 bits
    Bonsoir,
    mon problème est simple à exposer mais peut-être plus dur à résoudre...

    J'ai un gros projet qui compilé en 64 bits renvoie une "segmentation fault", faute qui n'est pas renvoyé si on compile en 32 bits. La bonne solution serait de partir à la chasse de cette erreur mais voilà le code n'est pas de moi et il est monstrueux (dans tous les sens du terme)...

    J'arrive à ma question. Peut-on simuler une compilation 32 bits sur un OS 64 bits ? Je suis Linux Ubuntu et j'utilise CodeBlock.

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 369
    Points : 23 623
    Points
    23 623
    Par défaut
    Bonsoir,

    Citation Envoyé par rambc Voir le message
    J'arrive à ma question. Peut-on simuler une compilation 32 bits sur un OS 64 bits ? Je suis Linux Ubuntu et j'utilise CodeBlock.
    Oui, et à dire vrai, ton O.S. est déjà prévu pour le faire. Les distributions de Linux fonctionnant sur architecture x86_64 sont pour ainsi dire toutes faites pour embarquer les versions 32 et 64 bits de leur packages.

    Par contre, il est probable que cela ne règle pas le problème : si tu obtiens une segfault en 64 bits et pas en 32, c'est que le programme est nativement bugué, qu'il peut planter à la moindre modification de son environnement original et, pour être franc, même si tu reconstitues entièrement cet environnement puisque c'est une erreur aléatoire.

    Il m'était arrivé la même chose il y a six, huit ans en portant un programme C depuis un serveur Sun Solaris vers une machine Linux. Le logiciel générait des pages web en CGI et était appelé depuis un serveur Apache. Segfault systématique après recompilation et mise en place. Je m'étais rendu compte que non seulement il était congénitalement bugué mais qu'en réalité, il plantait sur la machine source, à chaque fois et depuis le départ ! Par contre, il plantait après la génération de la page et non avant comme sur la machine cible, si bien qu'on ne s'en était jamais rendu compte jusque là. C'était une application développée par un bio-informaticien qui avait quitté le centre à la date où je me suis penché dessus.

    Autrement dit : ton programme a beau être monstrueux, c'est en mettant quand même les mains dans le cambouis et en isolant l'erreur que tu perdras le moins de temps à terme.

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    ...Je m'étais rendu compte que non seulement il était congénitalement bugué mais qu'en réalité, il plantait sur la machine source, à chaque fois et depuis le départ ! Par contre, il plantait après la génération de la page et non avant comme sur la machine cible, si bien qu'on ne s'en était jamais rendu compte jusque là....
    Salut
    Excellente histoire.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 679
    Points
    13 679
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    C'était une application développée par un bio-informaticien qui avait quitté le centre à la date où je me suis penché dessus.
    Avec des détails croustillants !

  5. #5
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 752
    Points
    1 752
    Par défaut
    Même si cette histoire est horrible , c'est bien ce que je craignais...

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 369
    Points : 23 623
    Points
    23 623
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Salut
    Excellente histoire.
    Citation Envoyé par Bktero Voir le message
    Avec des détails croustillants !
    On en voit de belles dans une carrière professionnelle. :-) Il y avait également cet exemple-ci.

    Je pourrais aussi parler du gars qui nous avait fait une page interactive en interne également, avec différents boutons, formulaires et autres gadgets interactifs, mais qui ne fonctionnait que sous Internet Explorer. Sous Firefox qu'on utilisait à peu près partout, la page s'affichait correctement, mais était totalement immuable. Tous les clics et autres événements utilisateurs étaient complètement ignorés.

    Technologie Microsoft, contrôles ActiveX, scripts VBScript faisant appel à des bibliothèques Windows propriétaires ? Non. Bug de Firefox alors ? Non. Erreur d'interprétation des C.S.S. (qui ont longtemps été une calamité) ? Presque… mais pas de la part du navigateur en cause !

    En fait, notre développeur avait écrit sa page en tâtonnant tant qu'il pouvait, et avait superposé les layers invisibles, qui recouvraient de deux ou trois couches parfois les formulaires de la page en question. Internet Explorer, lui, ne faisait qu'un rendu approximatif des C.S.S. et considérait le travail terminé. Les boutons, eux, et une fois déclarés, faisaient partie de la GUI du système et interceptaient les événements avant même qu'ils n'atteignent le document. Firefox, lui, faisait les choses proprement en transmettant les événements aux éléments d'avant plan.

    Suppression des éléments superflus et inutiles dans le code source de la page et l'application est redevenue utilisable partout. Je n'ai pas souhaité passer plus de temps à la nettoyer non plus. :-)

    Il y a eu des choses nettement plus graves mais que je les tairai car elles ont beaucoup pourri nos conditions de travail à l'époque.

    Citation Envoyé par rambc Voir le message
    Même si cette histoire est horrible , c'est bien ce que je craignais...
    Ne crains rien. Fais tourner ton application dans un débogueur et utilise des outils comme valgrind qui t'aideront déjà beaucoup. N'oublie pas non plus de faire une compilation la plus stricte possible avec les bonnes options. La majorité des problèmes seront résolus en amont.

  7. #7
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Elles sont belles vos histoires, mais il est également possible que l'appli ait été (mal) développée en 32 bits, et que l'erreur en 64 bits vienne, par exemple, de casts de pointeurs en int (volontaires ou involontaires... Voire par exemple le fameux cast du malloc quand on n'inclue pas stdlib.h). Dans ce cas elle peut très bien planter systématiquement en 64 bits, et fonctionner parfaitement en 32 bits.

    Sinon oui, ton OS 64 bits est capable de faire tourner des applis 32 bits. Mais il faut aussi avoir une version 32 bits de toutes les libs dont dépend l'appli.

  8. #8
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 752
    Points
    1 752
    Par défaut
    Une voie à explorer... Merci !

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

Discussions similaires

  1. Réponses: 50
    Dernier message: 14/08/2014, 13h57
  2. Comment faire tourner un programme en C sous linux ?
    Par petitclem dans le forum C++Builder
    Réponses: 4
    Dernier message: 24/06/2008, 17h49
  3. Réponses: 2
    Dernier message: 17/10/2006, 17h00
  4. faire tourner un programme C en background sous windows
    Par Filomenom dans le forum Windows
    Réponses: 10
    Dernier message: 17/02/2006, 18h16
  5. [TP7] Impossible de faire tourner un programme
    Par eleve88 dans le forum Turbo Pascal
    Réponses: 1
    Dernier message: 10/01/2006, 19h12

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