Perhaps a kind person would help clear up my confusion regarding
-static-libgcc?
Consider the following C++ program:
------------ foo.cc -------------
using namespace std;
#include <cmath>
int main (int argc, char *argv[])
{
int DIGITS;
DIGITS=14;
pow(1./10,DIGITS);
return 0;
}
-------------------------------
Then
% g++ -o foo foo.cc
% foo
foo: /lib64/libgcc_s.so.1: version `GCC_4.0.0' not found (required by foo)
%
but
% g++ -static-libgcc -o foo foo.cc
% foo
%
Ok, I say to myself, I understand this. The version of g++ that I am
using is one that I built in my home directory and so it's libgcc_s.so.1
is only linked if I use -static-libgcc. Whereas without -static-libgcc,
I am linking with the system libgcc_s.so.1 that is older and for some
reason is not working.
However if I now do
% g++ -static-libgcc -o foo foo.cc
% foo
% ldd foo
I get
libgcc_s.so.1 => /lib64/libgcc_s.so.1
which is the SYSTEM libgcc_s.so.1 and NOT the one
in my home directory:
/home/kate/gcc-4.1.1/x86_64-Linux/lib64/libgcc_s.so.1
Is ldd lying to me? Or am I totally misunderstanding -static-libgcc?
To add to my confusion, if I take out "using namespace std;" then
I get
% g++ -o foo foo.cc
% foo
%
Kate Minola
University of Maryland, College Park