5

私は、かなりのサイズの C++ ネットワーク アプリケーション コード ベースを、Solaris から Linux プラットフォームに移植するタスクを引き受けることになっています。このコードは、ACE などのサードパーティ ライブラリも使用します。最初に作成されたときのアプリケーションは、将来の移植の可能性については計画されていませんでした。

仕事の進め方についてアドバイスやアドバイスを頂きたいです。従うべき最善の方法は何でしょう。

-プラブ。S

4

4 に答える 4

7

ACE はマルチプラットフォームであるため、そこにプラスがあります。活字サイズがどこでどのように使用されているかを確認する必要があります。ACE_* 基本型が使用されている場合、それらは移植可能であるため、そこにストリークがあります。それ以外の場合は、Solaris のバージョンをマルチプラットフォームのデータ型と要素を使用するように変更することから始めます (ACE 機能を既に使用しているため、ACE 機能を使用します)。

Solaris のみの外部ライブラリを使用している場合は、Linux で同等のものを見つけてラッパーを記述し、アプリケーションの残りの部分がどの実装が使用されているかを知る必要がないようにする必要があります。

その後、Linux への移行は、1 つのコード ベースだけで簡単に進められるはずです。完全にコンパイルしてテストする必要があります。

于 2008-12-17T11:49:47.227 に答える
6

「移植されたアプリケーションだけが移植可能なアプリケーションというものはありません」

可能であれば、最初に両方のプラットフォームで同じツールを使用することから始めます。Solaris のバージョンが GCC や GNU make などを使用するように変更されていない場合は、まずこれを変更して、Solaris ビルドを機能させることをお勧めします。最初にコンパイラの問題を修正し、アプリケーションの移植と同時に Linux での問題を修正しようとしないことに気付くでしょう。

次に、各プラットフォームで同じバージョンの同じライブラリをすべて取得できることを確認してください。Linux用のACEを入手できると思います。そのバージョンのライブラリが Solaris で動作することを確認してください。これにより、互換性の問題が制限されます。

ここまでできたら、本当の仕事が始まります。

各ソース ファイルを一度に 1 つずつコンパイルし、Linux で使用できない関数を見つける必要があります。まず、両方の OS で利用できる代替品を探します。単純な置き換えがない場合は、Solaris 用と Linux 用の 2 つのライブラリを作成します。ラッパー クラスまたは関数を作成して、非互換性を抽象化します。

これが大変な作業のように聞こえる場合は、そうです。

于 2008-12-17T11:53:51.180 に答える
2

私は David Allan Finch が書いたことに同意します。一度に 1 つずつポートを取得します。加えて:

Solaris/SPARC または Solaris x86 から来ていますか? x86 の場合、エンディアンの問題はありませんが、SPARC の場合は、コードを調べて、バイト オーダー (エンディアン) の問題がないことを確認する必要があります。

Solaris コードは 32 ビットですか、それとも 64 ビットですか? 確かに、最初はアドレス空間を同じに保ちます。

于 2008-12-24T17:44:43.133 に答える
1

現在の外部依存関係をリストします。これらのうち、Linux で利用できるものを見つけてください。そうでない場合は、代わりを見つける必要があります。これらの外部依存関係への参照が関数またはオブジェクトの背後で抽象化されていない場合は、コードをリファクタリングして抽象化してください。次に、依存関係を置き換えて、抽象化関数を置換で実装できるようにします。

于 2008-12-17T11:51:50.483 に答える