Reputation: 191
So I created a static library with some basic assistance functions in C++ today. I built it with Clang 3.2 (SVN snapshot). However when I try to run a test program that links to it (prog.cpp), I get the following error:
~/Projects/CPP/AssisterLib> g++ prog.cpp -o program -static -L. -lassister /usr/lib64/gcc/x86_64-suse-linux/4.6/../../../../x86_64-suse-linux/bin/ld: cannot find -lm /usr/lib64/gcc/x86_64-suse-linux/4.6/../../../../x86_64-suse-linux/bin/ld: cannot find -lc collect2: ld returned 1 exit status
I get the same error with G++ and Clang++. Apparently it can't find libc.a and libm.a, which are both in /usr/lib64 (provided by glibc-devel in OpenSUSE). Adding -L/usr/lib64
does nothing for the error.
Why can't ld find those libraries? Is there a flag that I'm missing?
Upvotes: 4
Views: 5226
Reputation: 70482
The problem is likely the use of -static
. I would conclude you do not have static version of the libm
and libc
installed. You can try removing -static
to confirm.
The -static
flag signals to the compiler that you want your executable to be entirely statically linked, and so it fails if not all the libraries have static versions available.
Upvotes: 5