I have a project where I have one static library libhelper.a
and another with my actual shared object library, libtestlib.so
. My goal is to link libhelper.a
into libtestlib.so
. Is that possible on Linux/BSD? When I tried and created a test program I got the following errors:
./prog1:/usr/local/lib/libtestlib.so.1.0: undefined symbol ''
My guess is that this is occurring because libhelper.a was not compiled with -fPIC
while libtestlib.so
was. What is the proper way to build programs that use shared libraries that also have dependancies on static libraries?
Thanks!
My goal is to link libhelper.a into libtestlib.so. Is that possible on Linux?
Sure. This should do:
gcc -shared -fPIC -o libtestlib.so $(OBJS) \
-Wl,--whole-archive -lhelper -Wl,--no-whole-archive
libhelper.a was not compiled with -fPIC
It's best to rebuild libhelper.a with -fPIC
. If that's not possible, above command will still work on Linux/ix86
, but not on e.g. Linux/x86_64
.
What is the proper way to build programs that use shared libraries that also have dependancies on static libraries?
If you include libhelper.a
into libtestlib.so
as above, then simple:
gcc main.c -ltestlib
is all you need. If you insist on linking with libhelper.a
, then you must tell the end-user that he must link with e.g.
gcc main.c -ltestlib -lhelper
There is no way to specify that libtestlib.so
depends on libhelper.a
.
来源:https://stackoverflow.com/questions/5438891/mixing-static-libraries-and-shared-libraries