-
Vieux programme C
Bonjour,
J'ai récemment sorti des cartons un programme âgé de 25ans. Celui-ci me servait à la gestion du contenu d'un silo pour l'archivage, et il tournait sous système SunOS BSD 4.2 (32 bits). Voilà aujourd'hui étant sous Solaris 10, je voudrait connaitre les prérequis nécessaires (hormis un compilateur C ou GCC) pour qu'il puisse tourner sans problème en environnement 64 Bits.
D'avance merci
-
Qui peut le plus peut le moins.
Si tu as un environnement 64 bits, il peut exécuter des programmes 32 bits, c'est l'inverse qui poserait problème.
Pourquoi ne testes-tu pas?
-
Bonjour,
Si tu disposes du code source, et s'il fonctionnait déjà sur un système 32 bits, tu dois pouvoir le recompiler sans problème. Si tu passes de SunOS à Solaris 10, j'imagine que tu restes sur une architecture similaire.
Les choses qui pourraient éventuellement te causer quelques difficultés sont, d'abord, la rigueur relative portée à la rédaction du programme en C. En 1987, le C était déjà très répandu mais pas aussi « universel » et l'accès aux informations et aux règles de « bonne pratique » était beaucoup plus limité qu'il l'est aujourd'hui. Il se peut que des raccourcis aient été faits sur différents types de données. Cependant, si ton programme a été initialement développé sous Unix et à l'époque, il y a des chances pour qu'il soit propre de ce côté-là.
Ensuite, ton programme fait sans doute appel à plusieurs bibliothèques pour agir avec l'utilisateur et il se peut que certaines d'entre elles soient aujourd'hui hors d'âge. Il te faudra peut-être réinstaller certaines bibliothèques de compatibilité pour y parvenir. Cependant, il y a des chances pour qu'un programme de gestion de silo de cette époque fonctionne soit en mode texte dans un terminal, soit utilise les bibliothèques X-Window commerciales standard de l'époque (ex : Motif), auquel cas tu ne devrais avoir aucun problème à les faire fonctionner aujourd'hui.
Malgré tout, il faut quand même porter une attention particulière à l'architecture que tu utilises et utilisait à l'époque. Si j'en crois Wikipédia, BSD 4.2 a servi de base à SunOS jusqu'à sa version 3.0 en 1986 et il y a de fortes chances pour que la machine qui le faisait tourner alors soit un 68000 et qu'aujourd'hui ce soit un x86_64.
Il va donc falloir jeter un œil circonspect à la manière dont ton programme enregistre ses données. S'il le fait en binaire, en utilisant des structures C pour déclarer des champs et en les enregistrant telles quelles avec un write (fd,&ma_structure,sizeof ma_structure);, alors tes données risquent d'être incompatibles avec ton programme fraîchement recompilé, non seulement à cause de la taille des champs mais également leur endianness et le padding éventuel appliqué aux structures.
-
Attention également aux problèmes de pointeurs stockés dans des entiers (cela arrive avec certaines bibliothèques quand on doit leur passer des pointeurs de fonction "callback"): Il faudra changer les variables en question pour qu'elles aient la même taille qu'un pointeur (type standard intptr_t)