我有一个项目,其中有一个静态库libhelper.a,另一个有我的实际共享库libtestlib.so。我的目标是链接libhelper.a到libtestlib.so。在Linux / BSD上可以吗?尝试创建测试程序时,出现以下错误:
libhelper.a
libtestlib.so
./prog1:/usr/local/lib/libtestlib.so.1.0:未定义的符号’‘
我的猜测是,这是因为libhelper.a不是用-fPICwhile 编译的libtestlib.so。使用共享库(也依赖于静态库)来构建程序的正确方法是什么?
-fPIC
谢谢!
我的目标是将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。
Linux/ix86
Linux/x86_64
使用共享库(也依赖于静态库)来构建程序的正确方法是什么?
如果包括libhelper.a到libtestlib.so如上,那么简单:
gcc main.c -ltestlib
是你所需要的全部。如果您坚持与链接libhelper.a,那么您必须告诉最终用户他必须与链接,例如
gcc main.c -ltestlib -lhelper
无法指定libtestlib.so取决于libhelper.a。