Aer*_*ius 1 c++ compilation g++ shared-libraries dynamic-linking
比方说,你编译C ++共享库libBeta.so,这使得利用预现有的C ++共享库libAlpha1.so,libAlpha2.so,libAlpha3.so,等。如果我接着写它使用C ++应用程序libBeta.so直接(并因此间接使用其它库),我要我的应用程序链接到libBeta.so只,还是应该将我的应用程序链接到所有库?
我的直觉告诉我,我应该只链接到libBeta.so,因为链接到所有库似乎libBeta.so已经是多余的,就像已经链接到其他库一样。但是,undefined reference to错误证明了我的直觉是错误的。
有人可以解释一下为什么我的直觉在某些情况下可能是错误的吗?
ps:
编辑
事实证明,我用于编译的工具在编译可执行文件和编译共享库时具有不同的行为。编译共享库时,省略了与子库的链接:(
共享库是完全链接的实体,您无需显式链接到它们的依赖项。
这不同于仅是目标文件集合的静态库。使用静态库时,必须链接到其依赖项。但是对于共享库,不,您不需要。
如果您获得未定义的引用,则不是链接到共享库的依赖项。要么是您缺少与自己的代码的链接,要么是实际上是与静态库的链接。
| 归档时间: |
|
| 查看次数: |
258 次 |
| 最近记录: |