Frage

Es ist nicht sehr schwierig, die Binärverbots-Kompatibilität einer DSO/Shared-Bibliothek mit einer C ++-Schnittstelle zu brechen. Gibt es jedoch ein statisches Analysetool, das dazu beitragen kann, solche ABI -Pausen zu erkennen, wenn es zwei verschiedene Sätze von Header -Dateien angegeben hat: die eines früheren Zustands des DSO und die des aktuellen Zustands (und möglicherweise auch DSOs)? Sowohl kostenlose als auch kommerzielle Produktvorschläge sind willkommen.

Wenn es auch vor schlechten Praktiken, z. B. Inline -Funktionen und Standardfunktionsparametern in DSO -Schnittstellen warnen könnte, wäre dies großartig.

War es hilfreich?

Lösung

Ich gehe davon aus, dass Sie mit diesem Tutorial vertraut sind: Binärkompatibilitätsprobleme mit C ++, wenn nicht Lies es!

Ich habe von diesem Tool gehört:http://ipras.linuxbase.org/index.php/abi_compliance_Checker, Allerdings nie getestet oder verwendet, also keine Meinung.

Dies kann Sie auch interessieren: Erstellen von Bibliothek mit rückwärtskompatiblen ABI, der Boost verwendet

Andere Tipps

Abi-Compliance-Checker - Ein Tool zur Überprüfung der Kompatibilität einer gemeinsamen C/C ++- Bibliothek (DSO) auf Binär-/Quellenebene:

Ein Werkzeug zum Überprüfen von Binär- und Quellenebene-Kompatibilität einer C/C ++-Bibliothek. Das Tool überprüft Header-Dateien und freigegebene Bibliotheken alter und neuer Versionen und analysiert Änderungen in API und ABI (ABI = API+Compiler ABI), die möglicherweise binäre und/oder Quellenkompatibilität brechen können: Änderungen im Rufstapel, V-table-Änderungen, entfernte Symbole , umbenannt Fields usw.

enter image description here

ich überprüfe - C -Schnittstelle ABI/API Checker:

Ein Werkzeug zur statischen Überprüfung von C -Schnittstellen für API- und ABI -Änderungen. Alle Änderungen an Typdeklarationen, die ABI -Änderungen verursachen können, sollten zusammen mit den meisten API -Änderungen festgestellt werden. Icheck ist für die Verwendung mit Bibliotheken als Methode zur Verhinderung von ABI -Drift gedacht.

Shlib-compat - ABI -Kompatibilitätsprüfer für gemeinsam genutzte Bibliotheken mit Symbolversioning:

SHLIB-Compat verwendet Zwergdebugging-Symbole, um Definitionen exportierter Symbole, einschließlich Funktionsargumente und Strukturarten, neu zu erstellen und zu vergleichen.

Sie könnten auch an der interessiert sein Linux Upstream Tracker und Linux Abi Tracker Dienstleistungen. Sie werden beide vom Tool für ABI-Compliance-Prüfer angetrieben.

Ich erinnere mich bei der Arbeit, die sie benutzten GCC XML zum Testen von binärer Kompatibilität. Grundsätzlich erzeugt es eine XML -Darstellung des Compiler -Objektbaums. Die Theorie besagt, dass die binäre Kompatibilität beibehalten wurde, wenn die XML gleichwertig ist.

Die einzige sichere Möglichkeit, dies zu tun, besteht darin, Ihre Bibliothek mit einer C -Schnittstelle zu exportieren. Eine C ++ - Bibliothek ist nur mit dem einen Compiler kompatibel, den Sie zum Kompilieren verwenden.

Unser C ++ Smart Differcer Tool vergleicht zwei Quelldateien und Berichte Unterschiede in Bezug auf Sprachstrukturen (Kennung, Ausdrücke, Aussagen, ...) und plausible Bearbeitungsaktionen (Einfügen, Löschen, Verschieben, Ersetzen, Identifizierer, ...).

Es beantwortet die ABI -Frage nicht direkt, aber die Informationen, die sie liefert, sind möglicherweise ziemlich hilfreich. Ein Beispiel, das in einer anderen Antwort besprochen wird struktur {a, b} zu struktur {b, a}. SmartDiffercer würde das melden a wurde bewegt. (Hinweis: Ein reguläres Diff -Tool meldet, dass die Zeile, die die Strukturdefinition enthält, geändert wurde, sodass Sie die gleichen Informationen erhalten, aber SmartDifference ignoriert Änderungen in Whitespaces/Layout und Kommentaren, was weniger konzeptionelles Rauschen erzeugt.)

Was keine dieser Tools melden wird, ist die Änderung der Definition eines Typedefs, sondern in einer anderen Header -Datei. Aber vermutlich würde man alle beteiligten Header -Dateien vergleichen. Wenn Sie dies nicht manuell tun möchten, muss das Tool verwendet werden, das im Wesentlichen einen vollständigen C ++ - Parser, den Namen Resolver enthalten und die Erklärungen für die Äquivalenz vergleichen muss. Ein weiteres Poster schlug so ziemlich diese Antwort vor: Vergleich der GCCXML -Ausgabe für die Äquivalenz. Ich bin mir nicht sicher, wie einfach das in der Praxis ist. Es kann nicht nur "sind die Dateien die gleichen XML in Ordnung?".

ABI - Anwendung Binary Interface hängt von der Art und Weise, wie der Compiler den Quellcode übersetzt, in die maschinellen erkennbaren Anweisungen ab. Die gleiche Quellzeile kann im endgültigen Programm in unterschiedliche Bytesströme übersetzt werden.

Ein statischer Analysator, der über den Quellcode läuft, kann nicht vorhersagen, wie der Compiler ihn übersetzt. Diese Entscheidung erfolgt in der Compiler -Codierung oder -Einstellungen. Ich glaube also nicht, dass ein statischer Analysator Ihnen in diesem Fall hilfreich sein wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top