我正在尝试建立一个共享库。让我们说 libabc.so
。它使用另一个 .so
文件,比如 lib123.so
(在 /usr/local/lib
中的一个库)。现在我在我的应用程序中使用我的共享库 libabc.so
。说 my-app
。我想知道我应该如何链接这些二进制文件?我不想直接链接 my-app
与 lib123.so
。 my-app
应该只与 libabc.so
链接。我怎样才能做到这一点?
提前致谢。我正在使用 g++
编译器。
原文由 A R 发布,翻译遵循 CC BY-SA 4.0 许可协议
假设
libabc.so
是从 位置无关 的目标代码文件abc1.pic.o
和abc2.pic.o
中获得的;然后你用例如构建它们然后你建立
libabc.so
我在
-L/usr/local/lib
之前 添加了 ----l123
因为我假设您有一个/usr/local/lib/lib123.so
共享库。另请阅读 程序库 HowTo 。
如您所见,您可以将共享库
lib123.so
链接到您自己的共享库libabc.so
然后检查
ldd libabc.so
您可能希望在
libabc.so
中设置一些 rpath ,方法是将-Wl,-rpath
和-Wl,$RPATHDIR
添加到链接命令中。有关更多详细信息,请阅读 Drepper 的论文 如何编写共享库
PS。不要为
lib123.a
使用静态库(它应该是 PIC)。如果您将非 PIC 代码链接到共享对象,您将失去共享对象的大部分优势,并且动态链接器 ld.so 必须进行无数次重定位。