Dynamisch verknüpfte gemeinsam genutzte Bibliothek erweitern?

Ich bin neu in C, entschuldige meinen Mangel an Wissen (mein C-Buch hier ist wirklich riesig :)

Ich möchte eine Shared Library (libcustomer.so) mit Closed Source, aber öffentlich bekannter API erweitern.

Ist so etwas möglich?

Benennen Sie libcustomer.so in liboldcustomer.so umerstelle eine erweiterte Shared Library libcustomer.so (so dass andere implizit die erweiterte benutzen)binde liboldcustomer.so über -loldcustomer in meine erweiterte libcustomer.so einnicht extra implementierte Methoden direkt an die alte "liboldcustomer.so" weiterleiten

Ich denke nicht, dass es so funktionieren würde (der Name wird in die .so kompiliert, nicht wahr?). Aber was ist die Alternative?

Zu # 4: Gibt es eine allgemeine Möglichkeit, dies zu tun, oder muss ich eine Methode mit dem Namen der alten schreiben und den Anruf weiterleiten (wie?)?

Da sich die ursprüngliche Datei libcustomer.so (= liboldcustomer.so) von Zeit zu Zeit ändern kann, sollte alles dynamisch funktionieren.

Aus Sicherheitsgründen hat unser System kein LD_PRELOAD (sonst würde ich das nehmen :().

Denken Sie an erweiterte Validierungsprüfungen und einige bessere NPE-Abwicklungen.

Vielen Dank im Voraus für Ihre Hilfe!

BEARBEITEN:

Ich implementiere nur meine Erweiterung, wie in der Antwort gezeigt, aber ich habe im Moment einen unbehandelten Fall:

Wie kann ich die Strukturen aus der erweiterten Bibliothek "vertreten"?

Zum Beispiel habe ich folgendes:

customer.h:

struct customer;

customer.c:

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

Jetzt schreibe ich in meiner customer-extension.c alle öffentlichen Methoden von customer.c, aber wie kann ich die Strukturen "durchgehen"?

Vielen Dank für Ihre Zeit & Hilfe!

Antworten auf die Frage(1)

Ihre Antwort auf die Frage