Am Dienstag, 17. Februar 2009 18:42 schrieb Philipp Thomas:
* Andre Heine (linux-experience@gmx.net) [20090217 16:09]:
Hmm, laut Wikipedia ist damit die Hardware Ebene gemeint, nicht unbedingt die API...
Zum einen irrt Wikipedia, zum anderen ist es nicht das API!
Könnt Ihr das da nicht mal richtig stellen:-)
API ist die Schnittstelle, die sich Dir zum Programmieren (das P in API :) bietet. Wenn diese Schnittstelle in einer kompilierten Bibliothek vorliegt, spricht man vom ABI. Hier *müssen* die Schnittstellen passen, denn es handelt sich letztendlich um Maschienencode. Überleg mal was passiert, wenn sich z.B. die Argumente einer Funktion ändern, also zum Beispiel ein Parameter hinzukommt, das Programm aber eben einen Parameter zu wenig übergibt.
Ja, das habe ich verwechelt mit der API. Diese habe ich ja als Entwickler verändert. Daher muss ich neukompilieren... (modifizierte Header, etc ...) Jetzt habe ich vermutet, dass die ABI Version durch den Compiler vorgegeben wird. Damit meine ich, das jetzt der gcc3.3.5 die ABI Version "3" erzeugt, also das Binaryformat (ELF?) die ABI Version "3" hat. Das vertausche ich eventuell!? Würde ich den selben Quellcode mit dem gcc 4.2 compilieren, wäre die API meiner Library immer noch gleich. An den Parametern hat sich nichts verändert, trotzdem stimmt aber die ABI Version nicht und muss neu kompilieren... Das hatte ich bislang immer so angenommen...
Programmierschnittstelle eine Schnittstelle auf Quelltextebene definiert.
Eben :) Auf Quelltextebene, nicht auf Ebene der kompilierten Bibliothek.
die eine binärkompatible Schnittstelle zur Verfügung stellen, ohne dass ein Neukompilieren erforderlich wäre.
Eben deshalb muss eine Änderung des ABI mit der Erhöhung der Hauptversion verbunden sein, damit die Applikation, welche die neue Bibliothek nutzen will neu kompiliert werden muss. So verständlich?
Mir ist noch nicht der Zusammenhang zwischen der "Art und Anzahl" der Parameter und der ABI Version klar. Weil ich eben bis gestern glaubte, das ich als Entwickler die "Art und Anzahl" vorgebe... Durch _meine_ definierte API. Mit der ABI habe ich ja erstmal nichts am Hut...
Z.B. gcc 3.3.5 auf gcc 3.4.6 (ABI Version 3 -> ABI Version 4)...
Wie verhält sich das nun genau???
Genau wie ich geschrieben habe. Hier hatte sich dass vom GCC unterstützte ABI geändert. Des müssen alle Bibliotheken und Applikationen mit der gleichen Compiler-Version übersetzt werden, damit sie sich auch verstehen können.
Ja, genau. Ändert sich die ABI, muss ich neu komplieren. Auch wenn die API immer noch die selbe ist... Will so erstmal nicht in meinen Kopf, aber ich arbeite dran:-) Andre -- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org