2008-12-17 14 views
4

Je dois prendre en charge le portage d'une base de code d'application de mise en réseau C++ de taille assez importante de la plate-forme Solaris vers Linux. Le code utilise également des bibliothèques tierces comme ACE. L'application écrite initialement n'était pas prévue pour un éventuel portage dans le futur.Application de portage de Solaris à Linux

Je voudrais obtenir quelques conseils et suggestions quant à la façon dont je vais accomplir cette tâche. Quelles seraient les meilleures méthodes à suivre.

-Prabhu. S

Répondre

6

« Il n'y a pas une telle chose comme une application portable que des applications qui ont été portés »

de départ d'abord à l'utilisation des mêmes outils sur les deux plates-formes, si vous le pouvez. C'EST À DIRE. Si la version de Solaris n'a pas été modifiée pour utiliser GCC et GNU make etc, je vous conseille de changer cela en premier et de faire fonctionner la build Solaris. Vous constaterez que vous allez d'abord résoudre les problèmes du compilateur et ne pas essayer de les réparer sur Linux en même temps que d'essayer de porter l'application.

Deuxièmement assurez-vous que vous pouvez obtenir toutes les mêmes bibliothèques sur chaque plate-forme à la même version. Je pense que vous pouvez obtenir ACE pour Linux. Assurez-vous que les bibliothèques de cette version fonctionnent sur Solaris. Cela limitera les problèmes de compatibilité.

Une fois que vous avez fait cela, le vrai travail commence.

Vous devrez compiler chaque fichier source un à la fois et trouver les fonctions qui ne sont pas disponibles sous Linux. Cherchez d'abord un remplacement disponible dans les deux systèmes d'exploitation. S'il n'y a pas de remplacement simple, créez deux bibliothèques, l'une pour Solaris et l'autre pour Linux. Créez des classes ou des fonctions wrapper pour éliminer les incompatibilités.

Si cela semble beaucoup de travail - c'est.

7

ACE est un plus, car il est multiplateforme. Vous devez vérifier où et comment vos tailles de caractères sont utilisées. Si ACE_ * types de base sont utilisés, vous y trouverez une série, car ils sont portables, sinon je commencerais par changer la version de Solaris en utilisant des types de données et des éléments multiplateformes (utilisez les fonctionnalités ACE puisque vous l'avez déjà en place). Si vous utilisez une bibliothèque externe uniquement Solaris, vous devrez trouver un équivalent dans Linux et écrire un wrapper afin que le reste de l'application n'ait pas besoin de savoir quelle implémentation est utilisée. Après cela, la migration vers Linux devrait être simple avec une seule base de code. Vous devriez compiler et tester complètement.

1

Indiquez les dépendances externes actuelles. Trouvez ce qui est disponible sur Linux. Pour ceux qui ne le sont pas, vous devez trouver un remplaçant. Si les références à ces dépendances externes ne sont pas extraites derrière des fonctions ou des objets, refactorisez le code de sorte qu'il en soit ainsi. Puis remplacez les dépendances, de sorte que vous puissiez implémenter les fonctions d'abstraction avec le remplacement.

1

Je suis d'accord avec David Allan Finch. Prenez le port une étape à la fois. En outre:

Vous venez de Solaris/SPARC ou de Solaris x86? Si c'est x86, vous n'aurez pas de problèmes d'endian, mais si c'est SPARC, vous devrez examiner votre code pour vous assurer qu'il n'y a pas de problèmes d'ordre d'octet (endian).

Le code Solaris est-il 32 bits ou 64 bits? Assurez-vous que l'espace d'adressage reste le même initialement.