[CMake] Static linking and find_library

Marcel Loose loose at astron.nl
Fri May 8 10:58:37 EDT 2009


Hi Denis,

There are definitely cases where you do want to create a statically
linked executable; for example when running on a massively parallel
diskless system -- you don't want thousands of compute nodes to load a
shared library over some NFS link.

Anyway, the real problem with find_library() is, when you have a shared
library installed, but not the associated static library. In that case,
the linker will choke while creating a statically linked executable,
because it cannot find the library it needs.

I guess the only way to solve this is to manually set
CMAKE_FIND_LIBRARY_SUFFIXES, like FindBoost.cmake does. I wish there
were a more generic, platform-independent way to do this. Maybe worth a
feature request?

Best regards,
Marcel Loose.


On Fri, 2009-05-08 at 06:33 -0700, Denis Scherbakov wrote:
> 
> > 1) Is there a generic platform- and compiler-independent
> > way to specify
> > that you want to create a statically linked executable?
> 
> find /usr/share/cmake -type f | grep -E '\.cmake$' | xargs grep -i -n -H '\-static'
> 
> No matches == there is no cross-platform way to specify that you want static exectuable.
> 
> I think this is a bug, but since, we are talking about static executables, you may want to read http://people.redhat.com/drepper/no_static_linking.html
> 
> In general, linking statically is a very bad idea.
> Moreover, if your code is not GPL, you're not allowed to link against libc/libgcc statically. It is direct GPL violation.
>  
> > 2) How can I persuade find_library() to only search for
> > static
> > libraries?
> 
> You don't need to. -static option for gcc will make the trick and gcc will automatically pick *.a instead of *.so, if it exists.
> 
> 
> 
>       



More information about the CMake mailing list