using -static

David Daney ddaney@avtrex.com
Tue Oct 17 16:25:00 GMT 2006


Marco Trudel wrote:
> David Daney wrote:
> 
>> Andrew Haley wrote:
>>
>>> Marco Trudel writes:
>>> /home/Marco/.eclipse_workspace/GCC-source/libjava/gnu/classpath/natSystemProperties.cc:97: 
>>>  > warning: Using 'getpwuid_r' in statically linked applications 
>>> requires  > at runtime the shared libraries from the glibc version 
>>> used for linking
>>>  > 
>>> /home/Marco/Desktop/compile-lin-lin/gcc-4.2.0-lin-lin/lib/gcc/i686-pc-linux-gnu/4.2.0/../../../libgcj.a(natInetAddress.o): 
>>>  > In function `hidden alias for JArray<java::net::InetAddress*>*  > 
>>> java::net::InetAddress::lookup(java::lang::String*,  > 
>>> java::net::InetAddress*, bool)':
>>>  > java/net/natInetAddress.cc:206: warning: Using 'gethostbyaddr_r' 
>>> in  > statically linked applications requires at runtime the shared 
>>> libraries  > from the glibc version used for linking
>>>  > java/net/natInetAddress.cc:153: warning: Using 'gethostbyname_r' 
>>> in  > statically linked applications requires at runtime the shared 
>>> libraries  > from the glibc version used for linking
>>>  >  > This warnings occur when compiling a simple 
>>> System.out.println("hello")  > application with "-static".
>>>
>>> That's interesting.  It tells you that you really shouldn't link
>>> statically against libc, but I don't think that's news.
>>>   
>>
>> Certainly it is not new news.  I might suggest the shiny new (4.2 
>> only) -static-libgcj compile time option as an alternative.
> 
> 
> That requires the lib "libgcc_s.so" at runtime, but I think that's fine.
> 

-static-libgcc will change that.

> 
>> As time passes, libgcj is doing more and more dynamic linking.  A 
>> static libc does not work well with dynamic linking.  Static linking 
>> against libc really only makes sense in the situation where there is 
>> only a single executable image running in the entire system (ala 
>> busybox).  Unless you are working on small embedded systems, it is 
>> almost always the wrong thing to do.
> 
> 
> I'm not very familiar with this topic, so I don't understand everything 
> you and Andrew told me. So I would summarize like this:
> 
> I shouldn't use "-static", because it does some nasty dynamic/static 
> linking stuff. I could use -static-libgcj, that does more or less the 
> same as using a --disable-shared built gcj?!

I think you are correct.  You might also take a look at the wiki article 
on static linking of libgcj.



More information about the Java mailing list