Ist die ABI einer kompilierten Bibliothek vom Betriebssystem abhängig?

Ist die ABI einer kompilierten Bibliothek vom Betriebssystem abhängig?

Ich habe gerade gelesenein Beispielvon ABI. Ist es richtig, dass

  • Ein ABI ist ähnlich wie eine API, mit dem Unterschied, dass ABI in Maschinensprache und API in einer höheren Programmiersprache verfasst ist.

  • eine ABI ist die Schnittstelle, die von einer kompilierten Bibliothek in einer Maschinensprache bereitgestellt wird und zu dieser gehört? (Wenn ich richtig liege, stellt eine selbst erstellte kompilierte Bibliothek ihre ABI bereit (siehe das obige Beispiel). Ein Betriebssystem kann als kompilierte Bibliothek betrachtet werden und stellt daher seine eigene ABI bereit, damit Anwendungen auf seine Systemaufrufdienste zugreifen können.)

Das obige Beispiel erwähnt nicht, ob ein ABI einer selbst erstellten kompilierten Bibliothek vom Betriebssystem abhängt.

https://en.wikipedia.org/wiki/Anwendungsbinärschnittstelleerwähnt das Betriebssystem jedoch:

ABIs decken Details ab wie:

ein Prozessorbefehlssatz (mit Details wie Registerdateistruktur, Stapelorganisation, Speicherzugriffsarten, …)

die Größen, Layouts und Ausrichtungen grundlegender Datentypen, auf die der Prozessor direkt zugreifen kann

die Aufrufkonvention, die steuert, wie Funktionsargumente übergeben und Rückgabewerte abgerufen werden; beispielsweise, ob alle Parameter auf dem Stapel oder einige in Registern übergeben werden, welche Register für welche Funktionsparameter verwendet werden und ob der erste auf dem Stapel übergebene Funktionsparameter zuerst oder zuletzt auf den Stapel gelegt wird

wie eine Anwendung Systemaufrufe durchführen soll, umdas Betriebssystemund wenn die ABI direkte Systemaufrufe statt Prozeduraufrufe an Systemaufruf-Stubs angibt, die Systemaufrufnummern

und im Fall eines vollständigen Betriebssystem-ABI das Binärformat von Objektdateien, Programmbibliotheken usw.

Hängt die ABI einer kompilierten Bibliothek vom Betriebssystem ab? (Ich denke nicht. Selbst wenn eine kompilierte Bibliothek Systemaufrufdienste über die ABI des Betriebssystems verwendet, ist es die kompilierte Bibliothek und nicht ihre ABI, die vom (ABI des) Betriebssystems abhängt.)

Kann die ABI einer kompilierten Bibliothek unabhängig vom Betriebssystem sein?

Danke.

Antwort1

Die ABI einer kompilierten Bibliothek hängt von ihrem Ziel ab, und das muss kein Betriebssystem sein. Es gibt Bibliotheken für eingebettete Systeme ohne Betriebssystem und es gibt Bibliotheken für Plattformen wie Java, die die ABI des Betriebssystems abstrahieren.

Wie Sie sagen, bestimmt die ABI des Betriebssystems, wie eine Bibliothek (oder ein Programm) es aufruft; sie bestimmt nicht unbedingt, wie die Bibliothek aufgerufen wird. Was die ABI einer Bibliothek bestimmt, ist eigentlich ihre API zusammen mit den Besonderheiten des von ihr verwendeten Compilers. Der Compiler folgt normalerweise der ABI der Zielplattform, aber das ist nicht betriebssystemspezifisch; unter Linux ist die Plattform-ABI beispielsweisedas System V ELF ABI, mit architekturspezifischen Prozessorergänzungen.

Es ist jedoch möglich, dass die ABI eines Betriebssystems in die ABI einer Bibliothek eindringt, beispielsweise wenn die Bibliothek systemspezifische Strukturen in ihrer ABI direkt offenlegt.

verwandte Informationen