Linux 混合静态库和共享库
我有一个项目,其中一个是静态库Linux 混合静态库和共享库,linux,shared-libraries,static-libraries,dynamic-linking,fpic,Linux,Shared Libraries,Static Libraries,Dynamic Linking,Fpic,我有一个项目,其中一个是静态库libhelper.a,另一个是实际的共享对象库libtestlib.so。我的目标是将libhelper.a链接到libtestlib.so。这在Linux/BSD上可能吗?当我尝试并创建一个测试程序时,我得到了以下错误: ./prog1:/usr/local/lib/libtestlib.so.1.0:未定义的符号“” 我猜这是因为libhelper.a不是用-fPIC编译的,而libtestlib.so是。构建使用共享库(也依赖于静态库)的程序的正确方法是什么
libhelper.a
,另一个是实际的共享对象库libtestlib.so
。我的目标是将libhelper.a
链接到libtestlib.so
。这在Linux/BSD上可能吗?当我尝试并创建一个测试程序时,我得到了以下错误:
./prog1:/usr/local/lib/libtestlib.so.1.0:未定义的符号“”
我猜这是因为libhelper.a不是用-fPIC
编译的,而libtestlib.so
是。构建使用共享库(也依赖于静态库)的程序的正确方法是什么
谢谢
我的目标是将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
“将libhelper.a链接到libtestlib.so”什么?到目前为止您尝试了什么?在任何情况下,我都不知道如何将非PIC代码链接到共享库中。静态库通常只链接到可执行文件中,这就是为什么很少使用PIC编译它们的原因。你不能将这两个库链接到可执行文件中,或者从一开始就用PIC构建它们吗?谢谢,我可以用-fPIC重建libhelper.a,所以我将继续这样做。