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!