2014-09-03 18 views
5

Lassen Sie uns zuerst erklären, was ich mit einer Stub Shared Library meine: eine Shared Library, die verwendet werden kann (mit einer bestimmten von einer echten Bibliothek bereitgestellten Schnittstelle), aber nicht enthalten der eigentliche Code (hat also keine Funktionalität).Erstellen von Stub Shared Libraries unter Linux

Zusammen mit den Header-Dateien bietet es alles, was benötigt wird, um gegen die Bibliothek zu entwickeln.

Stubs können die Verknüpfung zu einer bestimmten Bibliothek ermöglichen, ohne dass der Code verfügbar ist. Aus Gründen der Kompatibilität kann es jedoch nützlich sein, eine Verknüpfung mit einem Stub einer bestimmten Bibliothek herzustellen. Siehe zum Beispiel In Linux stubs are used for standard libraries. Why are stubs required?

Idealerweise benötige ich eine Möglichkeit, eine Dummy-Bibliothek aus einer Symboldatei zu generieren. Diese Map-Datei wird wiederum entweder aus einer vorhandenen .so-Bibliothek oder im selben Build-Prozess generiert.

Gibt es irgendwelche Tools für diese frei verfügbar? Oder müsste ich meine eigene rollen?

Antwort

2

Ich denke, dass für einfache C-Bibliotheken, könnten Sie die Ausgabe von nm -D auf Ihre echte gemeinsame Bibliothek verwenden, um den Stub zu machen. Für Sie Instanz Rohr es in ein kleines awk Skript könnte die Funktionen des gleichen Namens definiert usw.

Ein anderer Ansatz wäre, Ihre kleine MELT Erweiterung einer aktuellen GCC Compiler zu machen, die den Stummel (zB in C erzeugen würde ++ oder C-Form) beim Kompilieren der realen Bibliothek, oder die jeden Funktionskörper löschen würde (in einem speziellen Modus zum Kompilieren einer Nur-Stub-Bibliothek). Dies würde für jede Sprache funktionieren, die von GCC kompiliert wird (erfordert jedoch ein gewisses Verständnis von GCC-Interna, beispielsweise Trees and Gimples). Fragen Sie nach [email protected]

Allerdings bin ich mir nicht sicher, das praktische Interesse solcher Stubs zu verstehen. In der Praxis hat eine gemeinsam genutzte Bibliothek einige spezifische Codierungsregeln und -verwendungen, und dies wird bei Verwendung von Stubs nicht überprüft. Um konkret zu sein, müssen Sie, wenn Sie Xlib verwenden, zuerst XOpenDisplay und dann XCloseDisplay aufrufen, und eine solche Regel kann nicht mit einem automatisch erzeugten Stub, etc ... überprüft werden.

+0

Ich versuche, dies mit einem zu tun riesige C++ - Bibliothek, ich fürchte, der einfache Ansatz wird nicht funktionieren. Und in der Tat kann die Bibliothek nicht (vernünftig) verwendet werden, um irgendetwas zur Laufzeit zu verifizieren, es ist nur zum Verknüpfen da. Bereitstellen einer Schnittstelle zum Verknüpfen, obwohl der zugrunde liegende Code unterschiedlich sein kann. – wump

+0

Dann könnten Sie den MELT-Ansatz in Betracht ziehen, d. H. Ihren GCC anpassen (z. B. um jeden Funktionskörper zu löschen). –