Shared vs Static (please read)

Jakub Jelinek jakub at redhat.com
Fri Dec 16 08:34:44 UTC 2005


On Fri, Dec 16, 2005 at 09:11:22AM +0100, Arjan van de Ven wrote:
> On Thu, 2005-12-15 at 23:48 +0000, Peter Jr. Quiring wrote:
> > I'm a C++ programmer that is porting from Windows to the Linux world.  So 
> > far things are great.  I've recently tried to use the -static option with 
> > gcc to generate binaries that are more portable, and so far it works.  
> 
> the problem is that due to a bunch of technicalities, -static binaries
> are LESS portable in linux, not more portable.
> 
> http://people.redhat.com/drepper/no_static_linking.html
> 
> However there is a middle ground; static link only the lib(s) that are a
> real portability problem, eg libstdc++, but not the rest. (at which
> point you need to be careful wrt the LGPL already but I don't know the
> exact details of the libstdc++ license, it may well have an exception
> for this).
> 
> Linking openssl static sounds like a nightmare from a security update
> pov.... it's better to avoid it anyway in non-core-OS software due to
> the very unstable ABI. 
> 
> btw the way to only link libstdc++ static is this:
> -Wl,-static -lstdc++ -Wl,-dynamic

-Wl,-Bstatic -lstdc++ -Wl,-Bdynamic
actually (and always make sure the command line ends in -Bdynamic state,
as that's what will be used for the implicitly added libraries
(-lc, -lgcc_s (sometimes), -lpthread (sometimes)).

I should note that libstdc++ is not bad ABI-wise recently, GCC 3.4, 4.0 (and
the upcoming 4.1) are all (backwards) binary compatible.  So if you build
against GCC 3.4 (e.g. FC3 or RHEL4), it will work on
FC3/FC4/FC5/RHEL4/(likely RHEL5) libstdc++/C++ ABI wise as well as any other
distro that ships with GCC 3.4/4.0/4.1.  Of course other libraries like
openssl might be a problem.

	Jakub




More information about the fedora-devel-list mailing list