I am struggeling a little bit with some options for linking on a project I am currently working on:
I am trying to create a shared library which is linked against 2 other libraries. (Lets call them libfoo.so and libbar.so)
My output library has to be a shared library and I want to static link libfoo.so to the resulting library, but libbar.so should linked as a dynamic library. (libbar.so should be available on every machine, where libfoo.so is not available and I do not want the user install it / ship it with my binaries.)
How could I archive this?
My current build instruction look like this:
c++ -Wall -shared -c -o src/lib.o src/lib.cpp
c++ -Wall -shared -o lib.ndll src/lib.o -lfoo -lbar
I my defense: I am not a c/c++ expert, so sorry if this question seems to be stupid.
There are two Linux C/C++ library types.
Static libraries (
*.a) are archives of object code which are linked with and becomes part of the application. They are created with and can be manipulated using thear(1)command (i.e.ar -t libfoo.awill list the files in the library/archive).Dynamically linked shared object libraries (
*.so) can be used in two ways.In order to statically link
libfoo.sointo your binary, you will need a corresponding static library which is typically calledlibfoo.a. You can use a static library by invoking it as part of the compilation and linking process when creating a program executable.The result would be changing your build commands to something like the following: