Telling gcc directly to link a library statically

It feels strange to me to use -Wl,-Bstatic in order to tell gcc which libraries I want to link with statically. After all I'm telling gcc directly all other information about linking with libraries ( -Ldir , -llibname ).

Is it possible to tell the gcc driver directly which libraries should be linked statically?

Clarification: I know that if a certain library exists only in static versions it'll use it without -Wl,-Bstatic , but I want to imply gcc to prefer the static library. I also know that specifying the library file directly would link with it, but I prefer to keep the semantic for including static and dynamic libraries the same.


It is possible of course, use -l: instead of -l . For example -l:libXYZ.a to link with libXYZ.a . Notice the lib written out, as opposed to -lXYZ which would auto expand to libXYZ .


You can add .a file in the linking command:

  gcc yourfiles /path/to/library/libLIBRARY.a

But this is not talking with gcc driver, but with ld linker as options like -Wl,anything are.

When you tell gcc or ld "-Ldir -lLIBRARY", linker will check both static and dynamic versions of library (you can see a process with -Wl,--verbose ). To change order of library types checked you can use -Wl,-Bstatic and -Wl,-Bdynamic . Here is a man page of gnu LD: http://linux.die.net/man/1/ld

To link your program with lib1, lib3 dynamically and lib2 statically, use such gcc call:

gcc program.o -llib1 -Wl,-Bstatic -llib2 -Wl,-Bdynamic -llib3

assuming that default setting of ld is to use dynamic libraries (it is on Linux).

链接地址: http://www.djcxy.com/p/85766.html

上一篇: GCC链接顺序改变了?

下一篇: 直接告诉gcc静态链接一个库