Thanks for you suggestion, Daichi.
I could see the rationale of my trouble by further investigation. The
JDK 1.1.8 binary release cannot work on recent FBSD 4.x systems in
nature. Generally, this problem happens when a program try to use
both the libc of the compat3x port and a FBSD 4's library using stdin,
stdout or stderr.
Quote:> > I tried to run JDK 1.1.8 V1999-11-9 (ELF version) on my FreeBSD
> > 4.8-STABLE box. It could not run and I had the following message:
> > % java
> > /usr/libexec/ld-elf.so.1: /usr/lib/libm.so.2: Undefined symbol "__stderrp"
JDK 1.1.8 uses the native libm of FreeBSD 4 and the libc of the
compat3x port as follows:
% ldd /usr/local/jdk1.1.8/bin/i386/green_threads/java
libjava.so => not found (0x0)
libxpg4.so.2 => /usr/local/lib/compat/libxpg4.so.2 (0x28066000)
libm.so.2 => /usr/lib/libm.so.2 (0x2806a000)
libc.so.3 => /usr/local/lib/compat/libc.so.3 (0x28085000)
FBSD 4's libm expects the FBSD 3's libc to supply the symbols
__stdinp, __stdoutp and __stderrp as stdin, stdout and stderr
respectively. But the compat3x's libc does not supply them.
In /usr/src/lib/libc/stdio/findfp.c of FBSD 4.8-STABLE:
* The following kludge is done to ensure enough binary compatibility
* with future versions of libc. Or rather it allows us to work with
* libraries that have been built with a newer libc that defines these
* symbols and expects libc to provide them. We only have need to support
* i386 and alpha because they are the only "old" systems we have deployed.
FILE *__stdinp = &__sF;
FILE *__stdoutp = &__sF;
FILE *__stderrp = &__sF;
So, there are several workarounds:
- Add __stdinp, __stdoutp and __stderrp to the compat3x's libc.
- Compile JDK 1.1.8 on a recent FBSD system.
(The patches to Sun's 1.1.8 are available.)
- Provide a small library supplying these symbols and load it
with JDK 1.1.8 somehow.
I prefer the modification to the compat3x port because this problem is
not limited to Java, rather general to programs which need compat3x.
Does someone have motivation to solve this problem?
I suppose no one is not using 1.1.8 on recent FBSD systems because we
have not seen such an trouble report on this list.