0

長々とした質問で申し訳ありませんが、回答を変更する可能性のある重要なポイントを省略していないことを確認したかったのです。

私は「C」で書かれたシステム ソフトウェアの保守を担当しており、そのうちいくつかの共通の「.a」ライブラリがあります。主な仕事は、「テストジョブ」実行可能ファイルの変数リストをフォークして実行し、テストジョブプロセスが終了すると実行マネージャーに制御を戻すことです。実行マネージャーを含むすべての実行可能ファイルは、前述のライブラリに対して静的にリンクされています。実行マネージャーと、それがフォークするテストジョブ プロセスは、共有メモリを介して IPC を使用します。共通ライブラリの 1 つには、決して変更されない定義済みのキーを使用して共有メモリを作成およびアタッチするためのラッパー関数が含まれています。

数か月前、私たちはソフトウェア (テストジョブと実行マネージャー) をロックダウンし、それらを静的にコンパイルしてリリースし、テストジョブを「証明」しました。その時以来、いくつかの一般的なライブラリ関数を選択する必要がある実行マネージャーに変更を加えるといういくつかの要求がありました。ただし、経営陣は、現在所有しているテストジョブ実行可能ファイルを再検証する必要があるため、共通ライブラリの新しいバージョンに対してテストジョブを再コンパイルしたくないと決定しました。そして彼らはそれをするためにお金を使いたくないのです。

すべての実行可能ファイルは静的にコンパイルされているため、同じ共通ライブラリの異なるバージョンに対して静的にコンパイルされたテスト ジョブと実行マネージャーを混在させても問題にはなりません。しかし、共有メモリを介した IPC の組み込みは、それがまだ正しいかどうか疑問に思っています。私の直感によると、共有メモリ ラッパー関数、特にキーに変更がない限り、問題はありませんが、これについては専門家の意見を参考にすることができます。

これを読んでくれてありがとう。

4

2 に答える 2

2

プロセスが共有メモリを介して相互に通信する方法を定義するデータ構造とプロトコルが変更されていない限り、問題はありません。(つまり、2 つのプロセスの間に存在する小さな ABI)。

于 2010-01-20T03:48:15.283 に答える
1

カフェの言うことを確認したい。共有メモリへのアクセスに使用されるキーとラッパー関数という重要なビットを正しく識別しました。これらのビットは、.o ファイルで定義されているかどうか、.a ファイルの一部であるかどうか、.a ファイル内のどこにあるかは関係ありません。リンク時に、元の機能を維持しながら exe に取り込まれます。.a ファイル内の「一時的なホーム」は、共有メモリ セグメントを見つける方法、関連するオフセットを決定する方法などには影響しません。したがって、これら (つまり、キーとラッパー関数) が変更されていない場合は、設定する必要があります。

于 2010-01-20T05:47:41.003 に答える