相关疑难解决方法(0)

动态加载和动态链接之间的区别?

在调用例程之前不会加载例程.所有例程都以可重新定位的加载格式保存在磁盘上.主程序被加载到内存中并被执行.这称为动态链接.

为什么这称为动态链接?不应该是动态加载,因为在动态加载中调用Routine之前不会加载,因为在动态链接中,链接推迟到执行时间.

linker operating-system loading dynamic

22
推荐指数
4
解决办法
6万
查看次数

dlopen 与标准动态链接的用例是什么?

根据文档,dlopendlopen一起dlsym用于加载库,并获取指向符号的指针。

但这已经是动态加载器/链接器所做的。此外,这两种方法都基于ld.so

使用时实际上似乎有两个不同之处dlopen

  1. 该库可以有条件地加载。
  2. 编译器不知道我们正在使用的符号(类型、原型...),因此不会检查潜在的错误。顺便说一下,这是实现自省的一种方式。

但是,它似乎并没有激发使用dlopen超标准加载,除了边际示例:

  1. 就内存占用优化而言,当共享库已被另一个程序使用时,条件加载并不是很有趣:加载已使用的库不会增加内存占用。
  2. 避免编译器监督是不安全的,也是编写错误的好方法......我们也错过了潜在的编译器优化。

那么,是否有其他用途dlopen比标准动态链接/加载更受欢迎?

c shared-libraries dynamic-linking

9
推荐指数
1
解决办法
2936
查看次数