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

Linking to shared libraries that call other shared libraries

我有一个 written/built 使用 libusb

的共享库

当我构建时,我必须 link 使用 libusb 共享库 - 到目前为止非常简单

但是如果我然后 write/build 一个使用我的共享库的 exe,当我构建那个 exe 时我是否也必须 link 到 libusb

我本以为答案应该是否定的,只要我的共享库知道在哪里可以找到 libusb 就应该没问题

但实际上,答案是肯定的,exe 确实必须 link 到 libusb,否则它会抱怨找不到对我的共享库调用的 libusb 函数的引用。

为什么我的 exe 需要 link 到 libusb 以及共享库 - 当然它应该将责任移交给共享库而不用担心它?

更新:

尝试想象一下:

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

myexe 还必须显式 link 到 libusb-1.0 对我来说似乎是多余的,因为这个知识已经从以前的 linking?

中隐含了

澄清一下,myexe 调用mylib.so 中定义的函数,它不调用任何libusb-1.0 函数'directly'。对 libusb-1.0 函数的唯一调用来自 mylib.so

中的函数

是的,理论上您也必须 link 您的 libusb。但是有像 libtool 这样的工具可以自动化第三级库依赖 linking。因此,当您 link 您的 mylib.so

时,libtool 将自动 link libusb

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