私はLinuxプラットフォーム上で共有ライブラリにいくつか変更を加え、更新されたライブラリをエンドユーザーに送りました。エンドユーザーは、バイナリ互換性が壊れていると信じていると報告しています(実際にどのようにそのことを知っているかはわかりません)。私が作ったLinuxで静的な変数バイナリ互換性を追加できますか?
変化は内部クラス(ユーザがヘッダファイルを有していない)にあった:
Iは、3つの異なる変更製:
- クラスに保護された静的メンバ変数を追加(のdidn 「tは本当に保護する必要がある)
- がクラスにプライベート静的メンバを追加
- )は、非匿名の名前空間で(CPPファイルへ
バイナリ互換性を損なう可能性があるこれらの変更(存在する場合)と、バイナリ互換性を損なわないように静的変数を追加する方法を教えてください。あるいは、バイナリ互換性を保つために一般的に安全な静的変数を追加していますか? (+
で示される)私が行った変更の
例
内部.hファイル:
class A
{
protected:
+ static Mutex m;
}
内部のcppファイル
void A::doSomething
{
+ m.Lock();
...
+ m.Unlock();
}
あなたは実際に何について尋ねていますか?静的変数を追加すると、通常は_binary compatibility_が破られることはありません。また、_mutex_には何がありますか?共有ライブラリから推論されたスレッドセーフなシングルトンについて質問していますか? –
エンドユーザーが主張する非互換性の性質は何ですか?ヘッダーを受け取らない場合は、ライブラリーに対して直接書き込むコードは使用できません。 –
ユーザは、ライブラリを動作させるために再コンパイルする必要があると信じていますが、コンパイルには数時間かかるので、現時点では実行できません。だから私の質問は、 "バイナリ互換性を壊すために何を変えたのですか"と "共有ライブラリに静的変数を追加してコードを再コンパイルせずにどうすればいいのですか?" – pauld