Converting a JAR into a gcj-statically-linked SO

Andrew Haley aph@redhat.com
Fri Jan 11 13:48:00 GMT 2008


Matthijs van de Water writes:
 > On Jan 9, 2008 4:30 PM, Andrew Haley <aph@redhat.com> wrote:
 > > Matthijs van de Water writes:
 > > > OK, that sounds easy but I'm not really sure how to do it... I'm
 > > > looking at the Makefile in libjava and the output of doing a "make
 > > > libgcj.la", which looks like it should contain the information I need.
 > > > But frankly I'm not really sure which of the huge amount of .o files
 > > > should be AR-ed together in the .a file.
 > > >
 > > > Can I somehow edit the libjava/Makefile to convince libtool to do the
 > > > dirty job for me?
 > >
 > > At the thought of anything to do with libtool I begin to panic. :-)
 > >
 > > You don't have to do anything like that. For every file that is
 > > compiled by libtool, two objects are created: one called foo.o and one
 > > called ./libs/foo.o. The non-PIC one is foo.o.
 > >
 > > So, to get an archive with just the PIC libs it's
 > >
 > > find . -name .libs | while read i; do ls -1 $i/*.o ; done | xargs ar q foo.a
 > >
 > > Pretty hacky but good enough for an experiment.
 > 
 > Thanks a bunch, that was the info I needed. After some fiddling* I've
 > managed to create a libgcj.a with all the PIC .o files in it.
 > This version links fine with the JAR.o file and my little C++ wrapper
 > API which hides all Java and best of all: it works (on x86)!
 > 
 > The only down-side is that the resulting shared library is 24MB big
 > even after stripping and optimizing. I was expecting a lot less, is
 > there any chance the compiler is linking in stuff that is not actually
 > needed?
No, there isn't. The problem you'll be coming across is the
interdependency of the Java libraries, and this is forced by the spec.
For example, the class loaders use URLs to load classes from anywhere,
and that pulls in the entire networking stack, even if your app
doesn't use any networking. Marco's suggestion of generating a link
map is a good one.
Andrew.
-- 
Red Hat UK Ltd, Amberley Place, 107-111 Peascod Street, Windsor, Berkshire, SL4 1TE, UK
Registered in England and Wales No. 3798903


More information about the Java mailing list

AltStyle によって変換されたページ (->オリジナル) /