Rozszerz dynamicznie połączoną bibliotekę współdzieloną?

Jestem nowy w C, przepraszam za brak wiedzy (moja książka C jest naprawdę ogromna :)

Chciałbym rozszerzyć udostępnioną bibliotekę (libcustomer.so) o zamknięte źródło, ale powszechnie znaną api.

Czy coś takiego jest możliwe?

zmień nazwę libcustomer.so na liboldcustomer.soutwórz rozszerzoną bibliotekę współdzieloną libcustomer.so (aby inni domyślnie korzystali z rozszerzonej)link liboldcustomer.so do mojego rozszerzonego libcustomer.so przez -loldcustomerprzekazuj dalej nie zaimplementowane metody bezpośrednio do starego „liboldcustomer.so”

Nie sądzę, żeby to działało w ten sposób (nazwa jest wkompilowana w .so, prawda?). Ale jaka jest alternatywa?

Dla # 4: czy istnieje ogólny sposób, aby to zrobić, czy muszę napisać metodę o nazwie podobnej do starej i przekazać połączenie (jak?)?

Ponieważ oryginalny libcustomer.so (= liboldcustomer.so) może się zmieniać od czasu do czasu, wszystkie te rzeczy powinny działać dynamicznie.

Ze względów bezpieczeństwa nasz system nie ma LD_PRELOAD (w przeciwnym razie wziąłbym to :().

Pomyśl o rozszerzonych testach sprawdzających i kilku lepszych procedurach NPE.

Z góry dziękuje za twoją pomoc!

EDYTOWAĆ:

Właśnie implementuję moje rozszerzenie, jak pokazano w odpowiedzi, ale w tej chwili mam jedną nieobsługiwaną sprawę:

Jak mogę „proxy” struktury z rozszerzonej biblioteki?

Na przykład mam to:

klient.h:

struct customer;

customer.c:

struct customer {
    int children:1;
    int age;
    struct house *house_config;
};

Teraz w moim customer-extension.c piszę wszystkie publiczne metody z client.c, ale jak mam przekazać te struktury?

Dziękujemy za poświęcony czas i pomoc!

questionAnswers(1)

yourAnswerToTheQuestion