Report about -static failing when libgcj.a built with GNU ar

Jan Mikkelsen janm@transactionware.com
Wed Apr 24 07:54:00 GMT 2002


Hi,

I reported something similar on FreeBSD some time ago:

http://gcc.gnu.org/ml/java/2001-10/msg00090.html

Unfortunately, I never got around to sending the patch to
libtool-patches as was suggested.  Sorry about that :-(.

Regards,

Jan Mikkelsen


> -----Original Message-----
> From: java-owner@gcc.gnu.org [mailto:java-owner@gcc.gnu.org] 
> On Behalf Of Loren James Rittle
> Sent: Wednesday, 24 April 2002 5:16 PM
> To: java@gcc.gnu.org
> Subject: Report about -static failing when libgcj.a built with GNU ar
> 
> 
> A fellow gcc developer that bootstraps GCC with --disable-shared
> reported a bootstrap failure on i386-*-freebsd* with that
> configuration.  I didn't see it with the default --enable-shared port
> configuration but I now understand the issue.
> 
> Doing a little research, it looks like FreeBSD (which uses GNU ar) has
> the same issue found with Darwin (which was reported to use BSD ar)
> back in January:
> 
> http://gcc.gnu.org/ml/java/2002-01/msg00005.html
> 
> Jeff Sturm posted the root cause here:
> 
> http://gcc.gnu.org/ml/java/2002-01/msg00037.html
> 
> By default, neither GNU ar 2.11.2 20010719 [FreeBSD] (as shipped with
> OS sources) nor GNU ar 2.12.1 20020412 (prerelease from FSF tree as
> taken today) appears to save/use path information (as required by
> libgcj).
> 
> This issue should be hitting every port that uses GNU ar; when people
> link with -static; or, at bootstrap time, when they configure with
> --disable-shared.
> 
> ; gcj --main\=hello -pthread -g hello.java
> ; gcj --main\=hello -pthread -static -g hello.java
> [...82 lines of errors for missing references, same as 
> Andreas posted...]
> 
> (That same error pops up during bootstrap, if configured without
> shared libraries.)
> 
> This is not a regression on this platform since --enable-libgcj was
> not the default for gcc 3.0 but it might be a regression on another
> platform.
> 
> It appears the thread to fix this issue died out without any final
> resolution (i.e. libjava or libtool patch).  It looks like adding the
> P option whenever `ar' is GNU `ar' is required to fix this bug, at
> least, until libgcj.a is built in one step.
> 
> AR_FLAGS is actually set at top-level Makefile.in not within libtool
> configuration files or libjava/Makefile.in itself (that itself seems
> like a bug; since libtool is suppose to be the master of building
> libraries).
> 
> Statically changing the top-level Makefile.in default is not really
> correct either since I see, e.g., Solaris ar doesn't support P (and
> will fail if provided).  And the user may have installed GNU ar on any
> port (especially for cross-compiler environments, I would think).
> Yuck: It looks like the ``ar'' to be used by the bootstrap process
> must be provided at configure time like ``ld'' and ``as''.  When it is
> seen to be GNU ar, ``P'' must be added to AR_FLAGS (at least when
> libtool is built within libjava).
> 
> [David, instead of my first workaround (e.g. --disable-libgcj when
>  --disable-shared), since you control the bootstrap make in your
>  process, you could use: ``gmake AR_FLAGS=rcP bootstrap'' 
> (which builds
>  a complete libgcj.a) instead of ``gmake bootstrap'']
> 
> Regards,
> Loren
> 




More information about the Java mailing list