no .so version on libjvm

Peter O'Gorman peter@pogma.com
Wed Nov 22 11:27:00 GMT 2006


On Nov 21, 2006, at 8:31 AM, Jack Howarth wrote:

>    I just noticed while tidying the packaging of
> gcc 4.2 for fink that we don't seem to have a .so
> version associated with libjvm (at least for Darwin).
> I get...
>
> otool -L /sw/lib/gcc4/lib/gcj-4.2.0/libjvm.dylib
> /sw/lib/gcc4/lib/gcj-4.2.0/libjvm.dylib:
>         /sw/lib/gcc4/lib/gcj-4.2.0/libjvm.dylib (compatibility  
> version 0.0.0, current version 0.0.0)
>         /sw/lib/gcc4/lib/libgcj.8.dylib (compatibility version  
> 9.0.0, current version 9.0.0)
>         /usr/lib/libSystem.B.dylib (compatibility version 1.0.0,  
> current version 88.1.7)
>         /sw/lib/gcc4/lib/libgcc_s.1.dylib (compatibility version  
> 1.0.0, current version 1.0.0)
>
> which seems to conflict with the definition of the compatibility  
> version.
> I understood that to be one greater than the actual .so version  
> (which would
> make our .so version -1). Shouldn't this be fixed for both gcc trunk
> and 4.2 branch?

Hi Jack,
Well, libjava's Makefile.am has:
libjvm_la_LDFLAGS = -avoid-version $(LIBGCJ_LD_SYMBOLIC)

So the lack of versioning would seem to be on purpose. Because the  
library is in a versioned directory this is not a problem, it will be  
in a different versioned directory on a different gcc release.

As for gnu libtool adding 1 to the compatibility and current versions  
on darwin, there is a very simple explanation. Apple's   32 bit  
linker will fail to create a shared library if either compatibility  
or current version is specified and zero - even though zero is the  
default if unspecified. The libtool maintainers at the time added 1  
to the versions to avoid this issue. Note that even though this  
behavior is different with the 64 bit linker, it will never be  
possible to stop adding 1 to the version numbers.

Hope this helps,
Peter



More information about the Gcc mailing list