链接到调用其他共享库的共享库

时间:2015-02-26 17:18:49

标签: linux linker shared-libraries ld

我有一个使用libusb编写/构建的共享库

当我构建时,我必须与libusb共享库链接 - 到目前为止这么简单

但如果我然后编写/构建一个使用我的共享库的exe,当我构建那个exe时,我还必须链接到libusb

我会认为答案应该是否定的,只要我的共享lib知道在哪里找到应该没问题的libusb

但实际上,答案是肯定的,exe必须链接到libusb,或者它抱怨它无法找到我的共享lib调用的libusb函数的引用。

为什么我的exe需要链接到libusb以及共享库 - 当然它应该将责任转移到共享库而不必担心它?

更新:

试图想象它:

myexe
 |
 | links to:
 |
mylib.so
 |
 | links to:
 |
libusb-1.0.so

对我来说,myexe也必须显式链接到libusb-1.0似乎是多余的,因为这些知识已经隐含在以前的链接中了?

澄清一下,myexe 只调用调用mylib.so中定义的函数,它不直接调用任何libusb-1.0函数。对libusb-1.0函数的唯一调用是由mylib.so

中的函数构成的

1 个答案:

答案 0 :(得分:1)

是的,从理论上讲,您还必须关联libusb。但是像libtool这样的工具可以自动化第三级库依赖关系链接。因此libtool会在您关联libusb

时自动关联mylib.so

参考http://www.gnu.org/software/libtool/manual/html_node/Inter_002dlibrary-dependencies.html