Re: Noch einmal Linux-ABI..

From: Martin Cracauer <cracauer(at)cons.org>
Date: Tue, 17 Apr 2001 21:52:43 +0200

In <200104170919.LAA19614(at)fischer.pps.de>, Peter Ross wrote:
> Hallo,
>
> noch einmal moechte ich wegen der Linux-ABI nerven, deren Funktionsweise ich
> nicht richtig kenne, weshalb ich vor folgendem Problem stehe:
>
> Eine Applikation benoetigt ein Poet-SDK (nur fuer Linux Kernel 2.2.x
> verfuegbar).
>
> Desweiteren wird ein bisschen X (lesstif etc.) u.ae. benoetigt.
>
> Ist es dazu notwendig, z.B. lesstif als Linux-Variante zu installieren?
>
> Oder kann ich die Poet-Linux-Bibliotheken irgendwie dazu bringen, die in
> linux-base verwendeten Libs zu verwenden und den Rest als
> Native-FreeBSD-Anwendung?
>
> Scheint mir illusorisch zu sein. Ist es an dem?

Rein theoretisch kann man Linux ELF objectfile mit FreeBSD objectfiles
zusammenlinken. Aber dann muss das API der C-Library stimmen und
wahrscheinlich auch des C-Startupcodes. Du muesstest also erst mal
eine FreeBSD-Version der glibc haben, wobei die systemcalls natuerlich
FreeBSD bleiben muessen. Wenn die zu verwendende Library Systemcalls
direkt verwendet, nicht ueber die shared C library hast Du keine
Chance, dann ist alles im Eimer, aber das ist sehr selten.

Damit das mit der FreeBSD-native glibc funktioniert, musst Du ggf. den
C-startup-Code und die exec() - Funktion des Kernels noch davon
unterrichten, dass Du weisst, was Du da tust.

> Kurz gesagt: Ist eine nicht unter FreeBSD verfuegbare Lib definitiv das Aus
> fuer eine FreeBSD-Anwendung, muesste ich dann alles als Linux installieren?

Naja, was ich eben beschrieben habe geht theoretisch, es hat aber noch
niemand gemacht.

> Wie verhaelt sich das letztendlich mit Perl-Modulen, die auf
> Linux-Bibliotheken zugreifen? Kann man in ein FreeBSD-Perl solchew Module
> "einbauen" oder benoetige ich dann ein Linux-Perl?

Wenn es *.o oder *.so files sind, dann koennen die nur von einem
entsprechenden Hauptprogramm dynamisch geladen werden. Eben
beschriebene Verwurstung ist moeglich.

> Wie aus diesen Fragen sicherlich ersichtlich, mangelt es mir an Verstaendnis
> fuer die Linux-ABI und die Bibliotheken, was da wie passiert.

Bibliotheken und Objectifiles sind jetzt mal das gleiche.

Das Du ohne oben beschriebenen Weg keine Linux- und
FreeBSD-Objectfiles zusammenlinken kannst, liegt daran, dass beide
sich mit der C-Library unterhalten wollen und dass der Startup-code
(crt0) ggf. diese Objectfiles aufrufen will. Wenn ein Objectfile
voellig frei von fremden Aufrufen seinerseits ist, dann muesste man es
auch so verwenden koennen, ansonsten wie gesagt braucht man um ein
Linux-Objectfile auch die C-Library drumherum, die es zum
Compilationszeitpunkt erwartet hat.

Du kannst Dir das auch so vorstellen, dass Du nur
Objectifles/Libraries zusammenlinken kannst, die zum Zeitpunkt, wo der
Compiler die .o - Files gebaut hat mit den gleichen Includefiles
compiliert wurden. Da Deine Linux-Bibliothek mit den includefiles der
glibc compiliert wurde und binaer vorliegt, kannst Du Dich nur
anpassen und musst dann auch die anderen Objectfiles mit diesen
Includefiles compilieren. Wurscht wird das eben dann, wenn das
fremb-Objectfile frei von Aufrufen udn Referenzen nach aussen ist,
also wenn es ohne #include - Statements auskommt.

Davon kann man bei einer Datenbankbibliothek aber nicht ausgehen...

Martin

-- 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Martin Cracauer <cracauer@cons.org>            http://www.cons.org/cracauer/
 As far as I'm concerned,  if something is so complicated that you can't ex-
 plain it in 10 seconds, then it's probably not worth knowing anyway -Calvin
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Tue 17 Apr 2001 - 21:52:49 CEST

search this site