gpt4 book ai didi

gcc - 针对共享库进行编译时会发生什么?

转载 作者:行者123 更新时间:2023-12-04 16:07:36 25 4
gpt4 key购买 nike

我知道在链接静态库(即 libname.a)时,所用函数的二进制代码将从存档中取出并插入应用程序二进制文件中。因此,静态库必须在编译时存在。

但是,对于共享库,我迷路了。不复制函数定义。然后为什么需要在链接器命令行上提供共享库 ?另外,是否有不同的方式链接共享库它们是什么?

最佳答案

共享库需要提供给链接器的命令行,以便将特定函数的引用和这些函数所在的文件存储到可执行文件中。当可执行文件运行时,首先加载动态链接器( /lib/ld-linux.so/libexec/ld-elf.so 等,取决于您的系统)并检查这些引用。一旦找到 lib 文件,它就会将它们(使用 mmap() 系统调用)映射到您程序的地址空间。

您可以通过运行来查看这些引用

objdump -T a.out

或者
nm -D a.out

对于 ELF 可执行文件,存在 .interp部分暗示程序使用动态链接。

关于gcc - 针对共享库进行编译时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15025040/

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