Suppose I have a file main.cpp
which uses sin()
function which is defined in libmath
. Also suppose that we have both libmath.a and libmath.so available in the same directory. Now if I issue the command g++ -o main main.cpp -lmath
the default behaviour of Linux is to link to the shared library libmath.so
. I want to know is there a way to force the program to link with the static library libmath.a
without deleting or moving the shared library?
You can't statically link a shared library (or dynamically link a static one).
Static Library Chains This is because static libraries don't link to other static libraries: All of the executable code only gets embedded in the executable. Technically, then, no static library depends on any other static library.
You'll need to pass the -static to the linker, but only for particular libraries you want. e.g.:
g++ -o main main.cpp -Wl,-Bstatic -lmath -Wl,-Bdynamic
If your linker supports -l:<filename>
you may use:
g++ -o main main.cpp -l:libmath.a
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With