在Linux中将共享库链接到另一个共享库

我正在尝试build立一个共享库。 让我们说libabc.so。它使用另一个.so文件,说lib123.so(在/ usr / local / lib中的lib)。现在我在我的应用程序中使用我的共享库libabc.so。 说我的应用程序。我想知道我应该如何链接这些二进制文件??我不想直接链接我的应用程序与lib123.so。 我的应用程序应该只链接到libabc.so。 我怎样才能做到这一点?

提前致谢。 我正在使用g ++编译器

假设libabc.so是从独立的目标代码文件abc1.pic.oabc2.pic.o ; 那么你已经用例如

  gcc -Wall -fPIC -O -g abc1.c -c -o abc1.pic.o gcc -Wall -fPIC -O -g abc2.c -c -o abc2.pic.o 

和你一起构建libabc.so

 gcc -shared abc1.pic.o abc2.pic.o -L/usr/local/lib -l123 -o libabc.so 

-l123 之前添加了-L/usr/local/lib 因为我假设你有一个/usr/local/lib/lib123.so共享库。

另请阅读程序库HowTo 。

如您所见,您可以将共享库lib123.so链接到您自己的共享库libabc.so

然后检查ldd libabc.so

PS。 不要为lib123.a使用静态库(它应该是PIC)。 如果将非PIC代码链接到共享对象中,则会丧失共享对象的大部分优点,动态链接程序ld.so必须执行无数次重定位。

当试图创建我自己的使用Berkeley DB的共享库时,我发现我必须将-ldb放在gcc命令的末尾,否则就会发现没有找到符号'db_create'。 这是在Cygwin下。

具体来说,这工作:

gcc -shared -o $ b / $ libfile nt _ *。o -ldb

这不起作用:

gcc -ldb -shared -o $ b / $ libfile nt _ *。o