将共享库与Linux中的另一个共享库链接

A R*_*A R 18 c c++ linux linker shared-libraries

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

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

Bas*_*tch 24

假设libabc.so是从获得posiition独立目标代码文件abc1.pic.oabc2.pic.o; 然后你用eg建造了它们

 gcc -Wall -fPIC -O -g abc1.c -c -o abc1.pic.o
 gcc -Wall -fPIC -O -g abc2.c -c -o abc2.pic.o
Run Code Online (Sandbox Code Playgroud)

与您共建libabc.so

gcc -shared  abc1.pic.o  abc2.pic.o -L/usr/local/lib -l123 -o libabc.so
Run Code Online (Sandbox Code Playgroud)

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

另请阅读程序库HowTo.

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

然后检查 ldd libabc.so

PS.不要使用静态库lib123.a(它应该是PIC).如果将非PIC代码链接到共享对象,则会失去共享对象的大部分优点,而动态链接器ld.so必须执行数以万计的重定位.