6

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

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

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

谢谢!

4

1 回答 1

12

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

当然。这应该这样做:

gcc -shared -fPIC -o libtestlib.so $(OBJS) \
  -Wl,--whole-archive -lhelper -Wl,--no-whole-archive

libhelper.a 未使用 -fPIC 编译

最好用 重建 libhelper.a -fPIC。如果这是不可能的,上面的命令仍然适用于Linux/ix86,但不适用于 eg Linux/x86_64

构建使用也依赖于静态库的共享库的程序的正确方法是什么?

如果你包含libhelper.alibtestlib.so上面,那么简单:

gcc main.c -ltestlib

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

gcc main.c -ltestlib -lhelper

无法指定libtestlib.so取决于libhelper.a.

于 2011-03-26T20:18:51.760 回答