H. J. Lu wrote:
On Fri, Dec 30, 2005 at 01:56:16PM -0500, Andrew Pinski wrote:
On Dec 30, 2005, at 1:53 PM, H. J. Lu wrote:
Gcc build executable linking against dynamic libraries by default.
"-static" will link against all static libraries. For run-time
portability, we may want to link against static gcc libraries, like
libstdc++.a, libgfortran.a, libgcj.a, ...., but against dynamic system
libraries, when we building executables. Currently, there is no easy
way to do it. We have -static-libgcc for libgcc.a. It will be nice to
have -static-gcclibs or something like that, to link against static
gcc libraries.
One, this will not work at all libobjc or libgcj since they
require lookups at runtime.
Are you saying "gcc -static" doesn't work with libobjc and libgcj?
I think that is what he is saying.
For the general case it is true. However that does not mean that it is
not a useful option. For the libgcj case, if you know what you are
doing and you do not need all the features of libgcj, static linking can
be advantageous.
I would much rather do 'gcj -static-gcclibs' flag than do this:
'gcc -shared-libgcc -Wl,-non_shared -lgcj -Wl,-call_shared \
-lsupc++ -Wl,--as-needed -lz -lgcc_s -lpthread -lc -lm -ldl \
-Wl,--no-as-needed'
Note that this is not a hypothetical case. That is my actual linker
command line.
David Daney.