GC symbols no longer exported (on Debian) from libgcj 8 and up
Andrew Haley
aph@redhat.com
Fri Nov 27 09:25:00 GMT 2009
Erik Groeneveld wrote:
> I have an application that uses libgcj (on Debian) and which needs to
> have access to the garbage collector to fine tune things. Up to
> libgcj 7, it was possible to create a extern/forward declaration for
> e.g. GC_free, and when the application is linked, the symbol would be
> resolved correctly.
>
> Starting with libgcj 8 and up, the symbols of libgcj are no longer
> exported it seems. On Linux, 'nm' reports that the symbols are of type
> 't', which means local, while up to libgcj 7, it reported them as 'T',
> which means global. Symbols of type 't' are not used for resolving
> external symbols, and hence my program does not link anymore.
>
> I dived into the package build for Debian (by Mattias Klose) and found
> that lot of things could have caused this behavior. However, what I
> can not find out is if this change was intentional or that is is
> caused by newer versions of the build tools.
>
> If it was intentional, my question is how I can get access to the GC?
The symbols exported are controlled by:
if ANONVERSCRIPT
extra_ldflags_libjava += -Wl,--version-script=$(srcdir)/libgcj.ver
endif
Which is:
# Anonymous GNU ld version script to hide boehm-gc, libffi and fdlibm
# symbols in libgcj.so.
{
global: Jv*; _Jv_*; __gcj_personality_v0; __gcj_personality_sj0; _Z*;
local: *;
};
Andrew.
More information about the Java
mailing list