Ich bin neu in C, so leid für meinen Mangel an Wissen (mein C-Buch hier ist wirklich massiv :)Eine dynamisch verknüpfte gemeinsam genutzte Bibliothek erweitern?
Ich mag eine gemeinsam genutzte Bibliothek (libcustomer.so) mit Closed-Source verlängern, aber den öffentlichen bekannte api.
Ist so etwas möglich?
- Umbenennungs libcustomer.so
- erstellen eine erweiterte gemeinsame Bibliothek libcustomer.so liboldcustomer.so
- Link liboldcustomer.so in meinem erweiterten libcustomer.so über -loldcustomer (so implizit andere die erweiterte man verwenden)
- weiterleiten alle nicht extra implementierten Methoden direkt an den alten „liboldcustomer.so“
ich es glaube nicht, dass die Art und Weise funktionieren würde (der Name wird in die .so zusammengestellt, es ist nicht wahr?). Aber was ist die Alternative?
Für # 4: gibt es eine allgemeine Möglichkeit, dies zu tun, oder muss ich eine Methode wie die alte benennen und den Anruf weiterleiten (wie?)?
Da das ursprüngliche libcustomer.so (= liboldcustomer.so) von Zeit zu Zeit ändern kann, sollten alle diese Dinge dynamisch arbeiten. Denken Sie über Extended Validation-Kontrollen
Aus Sicherheitsgründen wird unser System keine LD_PRELOAD hat (sonst würde ich, dass :().
& einige bessere NPE-Handlings.
Vielen Dank im Voraus für Ihre Hilfe
EDIT:
ich meine Erweiterung nur die Umsetzung, wie in der Antwort gezeigt, aber ich habe eine nicht behandelte Fall im Moment:
Wie kann ich die Strukturen aus der erweiterten Bibliothek "Proxy"?
Zum Beispiel habe ich dies:
customer.h:
struct customer;
customer.c:
struct customer {
int children:1;
int age;
struct house *house_config;
};
nun in meinem kunden extension.c Ich schreibe die ganze Öffentliche Methoden bilden customer.c, aber wie kann ich die Strukturen "durchreichen"?
Vielen Dank für Ihre Zeit & Hilfe!
Die Antwort für Ihre erste zusätzliche Frage ist bereits gegeben. Der zweite ist eng verwandt - C/C++ enthält keine binären Metainformationen wie Java/.NET, so dass Sie nicht erraten können, wie die Definition einer "Kunden" -Struktur aussehen könnte. Selbst wenn Sie sich an die Typen und Namen der Felder in dieser Struktur erinnern, können Probleme mit den Einstellungen des Compilers auftreten - z. B. Feldausrichtung. –
Okay danke. Ich werde jetzt die geschriebene Antwort versuchen :) –