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?