JDK 1.1.8 V1999-11-9 on recent FBSD 4

shudo at computer.org shudo at computer.org
Thu Jul 3 03:05:33 PDT 2003


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.


> > 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
  /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[0];
  FILE *__stdoutp = &__sF[1];
  FILE *__stderrp = &__sF[2];


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.


  Kazuyuki Shudo	shudo at computer.org	http://www.shudo.net/


More information about the freebsd-java mailing list