[uClibc]Re: gcc-uClibc botches -nodefaultlibs / -nostdlib

Miles Bader miles at lsi.nec.co.jp
Wed Oct 23 04:22:49 UTC 2002


Miles Bader <miles at gnu.org> writes:
> I don't know the semantics that gcc uses for these options (I can look
> tomorrow if you want), but based on the code in gcc-uClibc, it looks like the
> intention is that you use `-nostdlib' in the case where you want _nothing_
> passed to the linker, and `-nodefaultlibs' when you just want to omit the
> system _libraries_.

I looked at the gcc docs, and they seem to agree with what I wrote
above.  So can I check my change?

Thanks,

-Miles

Here's what the info page (`(gcc-3.2)Link Options') says:

`-nodefaultlibs'
     Do not use the standard system libraries when linking.  Only the
     libraries you specify will be passed to the linker.  The standard
     startup files are used normally, unless `-nostartfiles' is used.
     The compiler may generate calls to memcmp, memset, and memcpy for
     System V (and ISO C) environments or to bcopy and bzero for BSD
     environments.  These entries are usually resolved by entries in
     libc.  These entry points should be supplied through some other
     mechanism when this option is specified.

`-nostdlib'
     Do not use the standard system startup files or libraries when
     linking.  No startup files and only the libraries you specify will
     be passed to the linker.  The compiler may generate calls to
     memcmp, memset, and memcpy for System V (and ISO C) environments
     or to bcopy and bzero for BSD environments.  These entries are
     usually resolved by entries in libc.  These entry points should be
     supplied through some other mechanism when this option is
     specified.

     One of the standard libraries bypassed by `-nostdlib' and
     `-nodefaultlibs' is `libgcc.a', a library of internal subroutines
     that GCC uses to overcome shortcomings of particular machines, or
     special needs for some languages.  (*Note Interfacing to GCC
     Output: (gccint)Interface, for more discussion of `libgcc.a'.)  In
     most cases, you need `libgcc.a' even when you want to avoid other
     standard libraries.  In other words, when you specify `-nostdlib'
     or `-nodefaultlibs' you should usually specify `-lgcc' as well.
     This ensures that you have no unresolved references to internal GCC
     library subroutines.  (For example, `__main', used to ensure C++
     constructors will be called; *note `collect2': (gccint)Collect2..)

-- 
A zen-buddhist walked into a pizza shop and
said, "Make me one with everything."



More information about the uClibc mailing list