混合静态库和共享库

Ani*_*ger 6 linux shared-libraries dynamic-linking static-libraries fpic

我有一个项目,我有一个静态库libhelper.a,另一个与我的实际共享对象库,libtestlib.so.我的目标是链接libhelper.alibtestlib.so.这可能在Linux/BSD上吗?当我尝试创建测试程序时,出现以下错误:

./prog1:/usr/local/lib/libtestlib.so.1.0:未定义的符号''

我的猜测是,这是因为libhelper.a没有用-fPICwhile 编译libtestlib.so.构建使用对静态库具有依赖性的共享库的程序的正确方法是什么?

谢谢!

Emp*_*ian 11

我的目标是将libhelper.a链接到libtestlib.so.这可能在Linux上吗?

当然.这应该做:

gcc -shared -fPIC -o libtestlib.so $(OBJS) \
  -Wl,--whole-archive -lhelper -Wl,--no-whole-archive
Run Code Online (Sandbox Code Playgroud)

libhelper.a未使用-fPIC编译

最好用lib重建libhelper.a -fPIC.如果那是不可能的,那么上面的命令仍然会起作用Linux/ix86,但不会在例如Linux/x86_64.

构建使用对静态库具有依赖性的共享库的程序的正确方法是什么?

如果包括libhelper.alibtestlib.so如上,那么简单:

gcc main.c -ltestlib
Run Code Online (Sandbox Code Playgroud)

是你所需要的全部.如果你坚持要链接libhelper.a,那么你必须告诉最终用户他必须链接到例如

gcc main.c -ltestlib -lhelper
Run Code Online (Sandbox Code Playgroud)

没有办法指明libtestlib.so依赖libhelper.a.