Re: libdbus++ Build

Andre Heine <[email protected]>
Newsgroups gmane.linux.suse.programming
Organization none
Message-ID <[email protected]>
Am Dienstag, 17. Februar 2009 18:42 schrieb Philipp Thomas:
> * Andre Heine ([email protected]) [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
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.