gpt4 book ai didi

linux - linux如何在应用程序中加载库

转载 作者:太空宇宙 更新时间:2023-11-04 11:23:07 25 4
gpt4 key购买 nike


我感兴趣的是 linux 在图中的情况下是如何工作的。 enter image description here

您可以看到库“A”与应用程序静态链接。但是这个应用程序依赖于动态库B,而它又依赖于库A。
那么,什么库A会使用动态库B呢?在我的应用程序中静态链接库 A,否则它将再次加载其他库 A。
如果这些库有不同的版本,这一点很重要。
你也可以给我推荐一些关于我的文章,因为对我来说链接器就像黑盒子。

最佳答案

动态链接库 B libB.so - 应该动态链接,当 libB.so 构建时,到 libA.so 将看不到静态链接的 libA.a(更糟糕的是,它可能具有该库的重复全局变量,这可能会给您带来噩梦)。

实际上,libA.a 不存在于您的主程序的 ELF 可执行文件中。 libA.a 中只有一些但不是所有目标文件 a*.o 静态链接到您的可执行文件(实际需要的那些文件)中。

参见 Levine Linkers and Loaders书,维基页面 dynamic linkingELF和 Drepper 的论文 How To Write Shared Libraries .另见 ld.so(8) , ldconfig(8) , ldd(1) , dlopen(3) , mmap(2) , proc(5)手册页。使用strace,并尝试一次cat/proc/self/maps ...

简而言之,避免静态和动态链接同一个库(即使是相似或不同的版本)。

经验法则:始终动态链接,除非您知道自己在做什么以及为什么...

关于linux - linux如何在应用程序中加载库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16714874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com