@@ Tags: Linux;动态库
@@ Date: 2023-10-14 2126
动态加载共享库
当一个可执行文件开始运行之后,动态链接器会加载程序的动态依赖列表中的所有共享库,但有些时候延迟加载库是比较有用的,如只在需要的时候再加载一个插件。
这项功能由dlopen API实现,使得程序能够在运行时打开一个共享库,根据名字在库中搜索一个函数,然后调用这个函数。
* void *dlopen(const char *filename, int flags);
* 函数打开一个共享库,返回一个供后续调用使用的句柄。
* flags 必须包含RTLD_LAZY、RTLD_NOW之一,以及零个或任意个其他标志位的组合。
* RTLD_LAZY Since glibc 2.1.1
* 惰性绑定,表示只有在引用符号的代码被执行的时候才解析符号,这只发生在函数引用,针对变量的引用则总是在库加载时立即绑定的。
* 如果LD_BIND_NOW环境变量存在时,则会忽略该标志位。