私はCが初めてなので、知識が不足していて申し訳ありません(ここにある私のCブックは本当に大規模です:)
クローズド ソースで共有ライブラリ (libcustomer.so) を拡張したいと考えていますが、API は公開されています。
このようなことは可能ですか?
- libcustomer.so の名前を liboldcustomer.so に変更します
- 拡張共有ライブラリ libcustomer.so を作成します (したがって、他のユーザーは暗黙のうちに拡張ライブラリを使用します)
- -loldcustomer 経由で liboldcustomer.so を私の拡張 libcustomer.so にリンクします
- 余分に実装されていないメソッドを古い「liboldcustomer.so」に直接転送します
そのようには機能しないと思います (名前は .so にコンパイルされますよね?)。しかし、代替手段は何ですか?
#4の場合:これを行う一般的な方法はありますか、それとも古いメソッドのような名前のメソッドを作成して呼び出しを転送する必要がありますか(どのように?)?
元の libcustomer.so (=liboldcustomer.so) は時々変更される可能性があるため、すべてが動的に機能するはずです。
セキュリティ上の理由から、私たちのシステムには LD_PRELOAD がありません (それ以外の場合は :( )。
拡張された検証チェックといくつかのより良い NPE 処理について考えてみてください。
よろしくお願いします。
編集:
回答に示されているように拡張機能を実装しているだけですが、現時点では未処理のケースが 1 つあります。
拡張ライブラリから構造体を「プロキシ」するにはどうすればよいですか?
たとえば、私はこれを持っています:
customer.h:
struct customer;
customer.c:
struct customer {
int children:1;
int age;
struct house *house_config;
};
今、customer-extension.c で、customer.c からすべてのパブリック メソッドを作成していますが、構造体を「パススルー」するにはどうすればよいでしょうか。
お時間とご協力ありがとうございます。