On 11/10/2011 01:49 PM, Robert Ottenhag wrote:
On 11/10/2011 06:24 AM, mark.reinh...@oracle.com wrote:
Some Linux distros have started to adopt a "multiarch" filesystem layout for shared libraries in order to support the installation of packages for multiple hardware architectures on a single system. For more information see, e.g.,
http://wiki.debian.org/Multiarch.

In Ubuntu 11.10 the ALSA shared library, libasound2, was converted to the multiarch format and so its files moved from their old location, /usr/lib, to /usr/lib/${ARCH_TRIPLET}. This caused the JDK build to fail when linking the Java sound library. The root cause appears to be that gcc only tries to resolve undefined symbols against a multiarch library if the library is named
on the command line after the object files containing those symbols.

The fix is simply to move -lasound to the end of the gcc invocation.

I'll push this into JDK 8.  It would trivially backport to 7.

Patch:

--- a/make/javax/sound/jsoundalsa/Makefile
+++ b/make/javax/sound/jsoundalsa/Makefile
@@ -65,7 +65,7 @@
         $(MIDIFILES_export) \
         $(PORTFILES_export)

-LDFLAGS += -lasound
+EXTRA_LIBS += -lasound

  CPPFLAGS += \
         -DUSE_DAUDIO=TRUE \

Thanks,
- Mark

Mark,

The patch is correct, but in order to follow the convention in most other makefiles, I advice to use OTHER_LDLIBS instead of EXTRA_LIBS. I have tested this patch locally on Ubuntu 11.10-x64 for most branches for OpenJDK 6, 7 and 8 and meant to commit it earlier but... please go ahead.

Thank

/Robert


I am also not entirely convinced that the new multiarch support is the reason for these failures, although it may trigger it. The specification for GNU ld is that dependencies on the link line should always be written left to right, i.e. object files before library files. See also http://stackoverflow.com/questions/45135/linker-order-gcc/409402#409402. With that it mind, I would not be surprised if we get similar failures in the future and that is why I suggest that every linker line without circular dependencies should be ordered left to right. However, this will probably be satisfied in the near future as part of the new build-infra project that is converting each and every native library Makefile.

/Robert

--
Oracle
Robert Ottenhag | Senior Member of Technical Staff
Phone: +46850630961 | Fax: +46850630911 | Mobile: +46707106161
Oracle Java HotSpot Virtual Machine
ORACLE Sweden | Folkungagatan 122 | SE-116 30 Stockholm

Oracle Svenska AB, KronborgsgrÀnd 17, S-164 28 KISTA, reg.no. 556254-6746

Green Oracle

Oracle is committed to developing practices and products that help protect the 
environment
--

Reply via email to