how to force linker to use shared library instead of static library?
This is a quote from Linux programming book:
% gcc -o app app.o -L. –ltest
Suppose that both lib开发者_如何学Ctest.a
and libtest.so
are available.Then the linker must
choose one of the libraries and not the other.The linker searches each directory (first
those specified with -L
options, and then those in the standard directories).When the
linker finds a directory that contains either libtest.a
or libtest.so
, the linker stops
search directories. If only one of the two variants is present in the directory, the linker
chooses that variant. Otherwise, the linker chooses the shared library version, unless
you explicitly instruct it otherwise.You can use the -static
option to demand static
archives. For example, the following line will use the libtest.a
archive, even if the
libtest.so
shared library is also available:
% gcc -static -o app app.o -L. –ltest
Since if the linker encounters the directory that contains libtest.a
it stops search and uses that static library, how to force the linker to search only for shared library, and not for static?
% gcc -o app app.o -L. libtest.so
?
You could use -l
option in its form -l:filename
if your linker supports it (older versions of ld
didn't)
gcc -o app app.o -L. -l:libtest.so
Other option is to use the filename directly without -l
and -L
gcc -o app app.o /path/to/library/libtest.so
from the man :
-shared-libgcc
-static-libgcc
On systems that provide libgcc as a shared library, these options force the use of either the shared or static version respectively. If no shared version of libgcc was built when the compiler was configured, these options have no effect.
good luck
精彩评论