2016-04-26 6 views
1

私はLinuxプラットフォーム上で共有ライブラリにいくつか変更を加え、更新されたライブラリをエンドユーザーに送りました。エンドユーザーは、バイナリ互換性が壊れていると信じていると報告しています(実際にどのようにそのことを知っているかはわかりません)。私が作ったLinuxで静的な変数バイナリ互換性を追加できますか?

変化は内部クラス(ユーザがヘッダファイルを有していない)にあった:

Iは、3つの異なる変更製:

  1. クラスに保護された静的メンバ変数を追加(のdidn 「tは本当に保護する必要がある)
  2. がクラスにプライベート静的メンバを追加
  3. )は、非匿名の名前空間で(CPPファイルへ
を静的変数を追加しました

バイナリ互換性を損なう可能性があるこれらの変更(存在する場合)と、バイナリ互換性を損なわないように静的変数を追加する方法を教えてください。あるいは、バイナリ互換性を保つために一般的に安全な静的変数を追加していますか? (+で示される)私が行った変更の

内部.hファイル:

class A 
{ 
protected: 
    + static Mutex m; 
} 

内部のcppファイル

void A::doSomething 
{ 
    + m.Lock(); 
    ... 
    + m.Unlock(); 
} 
+0

あなたは実際に何について尋ねていますか?静的変数を追加すると、通常は_binary compatibility_が破られることはありません。また、_mutex_には何がありますか?共有ライブラリから推論されたスレッドセーフなシングルトンについて質問していますか? –

+0

エンドユーザーが主張する非互換性の性質は何ですか?ヘッダーを受け取らない場合は、ライブラリーに対して直接書き込むコードは使用できません。 –

+0

ユーザは、ライブラリを動作させるために再コンパイルする必要があると信じていますが、コンパイルには数時間かかるので、現時点では実行できません。だから私の質問は、 "バイナリ互換性を壊すために何を変えたのですか"と "共有ライブラリに静的変数を追加してコードを再コンパイルせずにどうすればいいのですか?" – pauld

答えて

0

"バイナリ互換性は、" おそらく保存するために関連しています/ロードパケットまたはネットワークパケット。 コンパイルに問題があるかもしれません - この場合はおそらく、別のコンパイラ/コンパイラのバージョンでビルドしたでしょう。

また、struct pack値も考慮してください。異なるstruct pack設定で、同じ構造体サイズを持つことができます。

+0

ハァッ??ここで_networking_が導入されましたか? –

+0

ええ、私はここに答えにいくつかの混乱があると信じています。私は、「2つのハードウェア/ソフトウェアシステムが同じバイナリコードを再コンパイルする必要なしに実行する能力」について話しています。 – pauld

1

"私は静的変数を追加するとバイナリ互換性の問題が発生する可能性がありますが、その場合はどのようにして問題を回避できますか?

コース問題が発生する可能性があります。

は、エンドユーザーが自分のライブラリに不正なデータを渡すには、あなたの記憶に踏みに、彼のプログラムにあなたのライブラリーのサイズをハードコーディングから、サポートされていないものの任意の数を行うことができますので、ば、ユーザのメモリ上 stomps、

これらのどれもバイナリ互換性とは関係ありません。

正確にはと表示されていることをエンドユーザーに説明する必要があります。これは、エンドユーザーが実際に障害を観察している人との間に「電話が壊れている」可能性があるため、それが完了したと言われる方が簡単かもしれません。しかし、にはが起こるか、あなたは決して進歩しません。

関連する問題