gpt4 book ai didi

c - 动态库 (.so) : Link time and run time

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

在链接时使用 .so 文件或在运行时使用它(dlopen() 等)之间的主要区别是什么?

  1. 在链接时使用时执行什么样的验证?
  2. 列出从 .so 公开并在目标二进制文件中使用的方法的头文件的作用是什么?
  3. 两种情况下的地址空间如何?

最佳答案

  1. 在链接时,编译器将只检查符号在库中是否可用,并指定稍后链接哪个库(以防您链接多个提供相同符号的库)

  2. 头文件只会告诉编译器哪些函数原型(prototype)可用,以及(取决于所使用的编程语言)如何将它们翻译成符号。例如C++ extern "C"

  3. 如果您链接到一个库,那么链接器将在可执行文件中创建一个全局地址转换表,该表将在加载库时在运行时填充符号地址。如果您使用 dlopen 打开库,那么您有责任通过 dlsym 创建自己保存符号指针的变量,但它允许您更灵活,例如在运行时更改它们,加载插件或其他在编译时不可用的功能。

关于c - 动态库 (.so) : Link time and run time,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21310701/

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