Précédent   Forum du club des développeurs et IT Pro > C et C++ > C > Débuter
Débuter Forum d'entraide pour débuter en langage C. Avant de poster -> FAQ C
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 26/02/2013, 22h31   #1
rambc
Membre Expert
 
Inscription : décembre 2006
Messages : 2 197
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 2 197
Points : 1 221
Points : 1 221
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.
rambc est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/02/2013, 22h47   #2
Obsidian
Modérateur
 
Avatar de Obsidian
 
Homme
Chercheur d'emploi
Inscription : septembre 2007
Messages : 4 610
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 36
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Chercheur d'emploi
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2007
Messages : 4 610
Points : 11 065
Points : 11 065
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.
Obsidian est déconnecté   Envoyer un message privé Réponse avec citation 30
Vieux 27/02/2013, 07h34   #3
Sve@r
Expert Confirmé Sénior
 
Avatar de Sve@r
 
Homme Frédéric
Ingénieur développement logiciels
Inscription : février 2006
Messages : 3 495
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Âge : 44
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 : 3 495
Points : 6 601
Points : 6 601
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.
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit.
Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant.
Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation.
Dr. Adrian Rogers, 1931
Sve@r est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 27/02/2013, 08h00   #4
Bktero
Expert Confirmé Sénior
 
Avatar de Bktero
 
Ingénieur systèmes embarqués
Inscription : juin 2009
Messages : 1 696
Détails du profil
Informations personnelles :
Âge : 25
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Ingénieur systèmes embarqués
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2009
Messages : 1 696
Points : 4 133
Points : 4 133
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 !
__________________
Si Code::Blocks vous dit undefined reference to 'socket@12', cela signifie que vous avez un problème d'édition des liens. Allez dans Projects / Build Options / Linker Settings / Add et renseigner ici les .a qui vont bien. Exemple pour les sockets : C:\Program Files\CodeBlocks\MinGW\lib\libws2_32.a

Pour les adeptes du langage SMS, allez ici et ramenez la traduction française ^^

Pour vos problèmes d'embarqué, utilisez le forum dédié !
Bktero est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 27/02/2013, 10h11   #5
rambc
Membre Expert
 
Inscription : décembre 2006
Messages : 2 197
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 2 197
Points : 1 221
Points : 1 221
Même si cette histoire est horrible , c'est bien ce que je craignais...
rambc est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 27/02/2013, 17h22   #6
Obsidian
Modérateur
 
Avatar de Obsidian
 
Homme
Chercheur d'emploi
Inscription : septembre 2007
Messages : 4 610
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 36
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Chercheur d'emploi
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2007
Messages : 4 610
Points : 11 065
Points : 11 065
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.
Obsidian est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/02/2013, 13h36   #7
matafan
Membre Expert
 
Homme
Ingénieur développement logiciels
Inscription : octobre 2008
Messages : 1 482
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 34
Localisation : France

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

Informations forums :
Inscription : octobre 2008
Messages : 1 482
Points : 2 438
Points : 2 438
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.
matafan est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 01/03/2013, 00h32   #8
rambc
Membre Expert
 
Inscription : décembre 2006
Messages : 2 197
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 2 197
Points : 1 221
Points : 1 221
Une voie à explorer... Merci !
rambc est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 08h39.


 
 
 
 
Partenaires

Hébergement Web