我有一个项目,我有一个静态库libhelper.a
,另一个项目是我的实际共享对象库libtestlib.so
。我的目标是将libhelper.a
与libtestlib.so
相关联。这可能在Linux / BSD上吗?当我尝试创建测试程序时,出现以下错误:
./ prog1:/usr/local/lib/libtestlib.so.1.0:undefined symbol''
我的猜测是发生这种情况是因为当-fPIC
为libtestlib.so
时,libhelper.a未使用{{1}}进行编译。构建使用共享库的程序的正确方法是什么?这些库也具有静态库的依赖性?
谢谢!
答案 0 :(得分:11)
我的目标是将libhelper.a链接到libtestlib.so。这可能在Linux上吗?
不确定。这应该做:
gcc -shared -fPIC -o libtestlib.so $(OBJS) \
-Wl,--whole-archive -lhelper -Wl,--no-whole-archive
libhelper.a未使用-fPIC编译
最好使用-fPIC
重建libhelper.a。如果那是不可能的,则上面的命令仍然适用于Linux/ix86
,但不能用于例如Linux/x86_64
。
构建使用共享库的程序的正确方法是什么?这些库也具有静态库的依赖性?
如果您将libhelper.a
包含在libtestlib.so
中,那么就这么简单:
gcc main.c -ltestlib
就是你所需要的。如果你坚持要与libhelper.a
联系,那么你必须告诉最终用户他必须链接到例如。
gcc main.c -ltestlib -lhelper
无法指定libtestlib.so
取决于libhelper.a
。