JDK 7 build 24 is available at the openjdk.java.net website

Arnd-Hendrik Mathias arnd-hendrik.mathias at nefkom.net
Sun Dec 23 15:48:46 UTC 2007


Hi Andreas,

Andreas Sterbenz wrote:
> See below output of a rebuild of make/javax/crypto after a previous 
> build of a fresh clone of the Mercurial jdk repository. If you see 
> something different, that must be related to your build environment, 
> e.g. version of make used, out of date binary plugs, etc.
Since my output looked quite different, it was not really comparable 
with the correct output you posted. After further examination of the 
make-/build environment, I found out that the make environment assumes 
some tools to reside in /usr/bin per default. I found that this can be 
overwritten by the ALT_USRBIN_PATH variable. However, if tools reside in 
different directories (/bin /usr/bin ...) setting

ALT_USRBIN_PATH=                <empty>

and having the PATH variable set to have all these tools available 
directly may be the method the most likely to work. In my special case 
"head" was missing, residing in /bin on my system.

After changing this setting jdk7 build process ran a bit longer, until 
it ran into another problem:
Linking of a mass of object files from the jdk/make/sun/splashscreen 
directory results in a number of missing symbols from the png library:

/opt/jdk/openjdk-1.7.0_b24/tmp/sun/sun.awt/splashscreen/obj64/png.o: In 
function `png_init_mmx_flags':
png.c:(.text+0xbc): undefined reference to `png_mmx_support'
/opt/jdk/openjdk-1.7.0_b24/tmp/sun/sun.awt/splashscreen/obj64/pngpread.o: 
In function `png_push_process_row':
pngpread.c:(.text+0x89e): undefined reference to `png_read_filter_row'
pngpread.c:(.text+0x964): undefined reference to `png_do_read_interlace'
/opt/jdk/openjdk-1.7.0_b24/tmp/sun/sun.awt/splashscreen/obj64/pngpread.o: 
In function `png_progressive_combine_row':
pngpread.c:(.text+0x141): undefined reference to `png_combine_row'
/opt/jdk/openjdk-1.7.0_b24/tmp/sun/sun.awt/splashscreen/obj64/pngread.o: 
In function `png_read_row':
pngread.c:(.text+0xb64): undefined reference to `png_combine_row'
pngread.c:(.text+0xb79): undefined reference to `png_combine_row'
pngread.c:(.text+0xc20): undefined reference to `png_read_filter_row'
pngread.c:(.text+0xc6a): undefined reference to `png_combine_row'
pngread.c:(.text+0xc92): undefined reference to `png_combine_row'
pngread.c:(.text+0xc9f): undefined reference to `png_do_read_interlace'
pngread.c:(.text+0xd10): undefined reference to `png_combine_row'
collect2: ld returned 1 exit status

Extending the OTHER_LDLIBS variable in the 
jdk/make/sun/splashscreen/Makefile by

-lpng

helps to remove the undefined reference to `png_mmx_support'. The other 
undefined references remain.
After taking a closer look at the libpng.so by e.g.

nm /usr/lib/libpng.so | grep png_read_filter_row

I found out that these symbols exist in the text segment, but only as 
internal symbols:

0000000000007de0 t png_read_filter_row

How come they can link in your environment at all? Have you built your 
libpng in a special way and is there a workaround to replace these 
library calls by OpenJDK-internal implementations or something likewise?

Anyway, I still got one other question: What is the background of all of 
those overwrite variables in the jdk/make/common/Defs-linux.gmk? 
Omitting the overwrite directive would ease redefining some environment 
definitions like OPENWIN_HOME or OPENWIN_LIB from command line, for 
which no ALT_... variables exist.
Best regards

Arnd-Hendrik



More information about the discuss mailing list