Re: Linux_base und shared libs ...

From: Peter Ross <Peter.Ross(at)alumni.tu-berlin.de>
Date: Mon, 20 Oct 2003 22:47:53 +1000 (EST)

On Mon, 20 Oct 2003, Volker wrote:

> auch gute Einblicke in Java

Noeh, nicht wirklich. Ich kann nur Java-Entwicklern ein JDK installieren
oder einen Tomcat konfigurieren, Java selbst kann ich nicht wirklich.

Ich krieg immer Ausschlag, wenn ich sehe, was die Entwickler fuer
Verzeichnisbaeume anbringen, die man angeblich braucht, um "Hallo Erde" zu
rufen. Ob Java geeignet ist, modular und uebersichtlich zu programmieren?

> Angewandt auf mein ldd-Eingangsbeispiel auf die java binary:
> /compat/linux/usr/bin/ldd /usr/local/jdk118_v3/bin/i686/green_threads/java
> erhalte ich nun folgende Meldung:
> /compat/linux/usr/bin/ldd: /lib/ld-linux.so.2: not found

ldd ist nur ein Anzeigeprogramm fuer die Abhaengigkeiten, und, wie ich
eben feststellte, unter Linux ein Shellskript (das wusste ich bis eben
nicht, unter FreeBSD ist es ein Binary) Und da weiss FreeBSD nicht, dass
es ein Linux-Programm ist und "chrooted" es nicht nach /compat/linux.

Das "chroot" passiert nur beim Laden von Programmen, die der Lader als
Linux-Binaries erkannt hat. Deshalb gibt es auch brandelf(1), um den Typ
des Binaries "einzubrennen".

Fuers echte Laden von *.so zur Laufzeit ist unter FreeBSD ld-elf.so.1 da,
unter Linux ld-linux.so.2, welches von einem echten Linux-Programm auch
gefunden wird.

Anyway, mir scheint, zum Anzeigen ist das FreeBSD-ldd geeignet:
> ldd /usr/local/linux-sun-jdk1.3.1/bin/i386/green_threads/java
/usr/local/linux-sun-jdk1.3.1/bin/i386/green_threads/java:
        libhpi.so => not found
        libjvm.so => not found
        libdl.so.2 => /lib/libdl.so.2 (0x28065000)
        libc.so.6 => /lib/libc.so.6 (0x28069000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x2804c000)

Du wist dieses java wohl nie direkt aufrufen, sondern immer durch den
.java_wrapper, der eine Menge Variablen setzt (es ist ein Shellscript)

U.a. den LD_LIBRARY_PATH, der dann auch (bei mir)
/usr/local/linux-sun-jdk1.3.1/jre/lib/i386/green_threads beinhaltet (und
hier die Bibliotheken, die eben nicht gefunden wurden)

Fuers Konfigurieren der systemweiten Laderpfade ist aber, das ist nach wie
vor richtig, fuer jeden Typ von ABI "sein" ldconfig zustaendig.

Soviel zu meinem "Expertentum". "Irren ist menschlich" sprach der Igel und
stieg von der Zahnbuerste. Tut mir leid, ich hoffe, Du bist noch nicht zu
verwirrt.

> 2)
> Wenn ich unter FreeBSD.org Blackdown Java Ports suche, erhalte ich in diesem
> Zusammenhang u.a. stets den Hinweis auf
> "Requires: javavmwrapper-1.4, linux_base-7.1_5 etc." ...
>
> Bisher war für mich ein Java-Wrapper DAS ".java_wrapper" im BIN-Verzeichnis
> des jeweiligen JDK.
>
> Das ist aber ja wohl nicht identisch mit dem, was mit "javavmwrapper-1.4"
> gemeint ist!?

Nein.

> pkg_info | grep java
javavmwrapper-1.4 Wrapper script for various Java Virtual Machines
> pkg_info -L javavmwrapper-1.4
Information for javavmwrapper-1.4:

Files:
/usr/local/bin/javavm
/usr/local/bin/registervm
/usr/local/bin/unregistervm
>

Diese Files hat das Package installiert..

Ich gucke mal oben in /usr/local/bin/javavm:

#!/bin/sh
#
# javawrapper.sh
#
# Allows to install several Java Virtual Machines
# on the same system and use config file/or environment
# variable to select wichever to use

Klingt brauchbar, oder?

> ls -l /compat/linux/lib/libc.so.6 zeigt bei mir an: libc-2.2.4.so

> Angenommen ich habe ein Programm, dass libc-2.2.5 benötigt, muss ich dann
> schauen, ob eine aktuellere Linux_Base (bspw .8.x) diese enthält, oder was ist
> dann zu tun?

Ja. Entweder neuere Linux-base oder "von Hand" von irgendwoher eine
Linux-libc besorgen.

> Vor allem ist mir noch nicht ganz klar, wie zu verfahren ist, wenn
> verschiedene Linux-Binaries, die ich unter FreeBSD laufen lassen möchte,
> unterschiedliche libc-Versionen benötigen?

Immer die neueste libc verwenden, wuerde ich sagen. Die sollten eigentlich
aufwaertskompatibel sein.

> libc.so.6 (warum heisst die eigentlich so und nicht gleich libc-2.2.4.so
> ?)

Der Historiker in mir versagt ein bisschen. Erst gab es eine GNU-libc,
glibc, bis Version 5, wenn ich mich nicht irre, und dann wurde irgendwie
alles neu gemacht und hiess gleichzeitig glibc 6 und GNU-libc Version 2.
Und diese Aussage ist etwas schwammig. Ich bitte um Absolution oder
Korrektur;-)

> shujit-0_7_11-bin-linux-glibc2-jdk131_tar.gz
> - Blackdown JDK 1.3.1_02a, GCC 3.1 20020307, glibc 2.2.5, Linux 2.4.19-pre2
> - Blackdown JDK 1.2.2, GCC 3.1 20020307, glibc 2.2.5 and Linux 2.4.19-pre2
> - JDK 1.1.8v3, GCC 3.1 20020307, glibc 2.2.5 and Linux 2.4.19-pre2

Klingt erst einmal wie "damit haben wir es getestet, verwenden Sie andere
Versionen auf eigene Gefahr".

Entweder mit der Gefahr, dass etwas schiefgeht, leben, und es erst einmal
ausprobieren, oder aber die geforderten Versionen bis ins i-Tuepfelchen
bereitstellen.

Klingt nach Arbeit, die ich mir nur im Notfall mache;-)

Gruss
Peter

To Unsubscribe: send mail to majordomo.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Mon 20 Oct 2003 - 14:52:49 CEST

search this site