C++ So 编译及使用 (Todo)

共享库Open

在C++中,dlopen()函数用于动态加载库(也称为共享库)。该函数的原型如下:

1
cpp复制代码void* dlopen(const char* filename, int flag);

其中,filename参数指定要加载的库的文件名,flag参数指定加载库的方式。

RTLD_LAZY,RTLD_LOCALRTLD_DEEPBINDflag参数选项,它们的作用如下:

  • RTLD_LAZY:使用该选项时,库中的函数和变量在第一次使用时才会被解析。也就是说,如果在库中引用了某个函数或变量,那么在加载库时不会立即解析它。而是在第一次调用该函数或使用该变量时,才会进行解析。这种方式被称为懒加载。
  • RTLD_LOCAL:使用该选项时,库中的函数和变量对于调用程序来说是局部的。这意味着在库中定义的函数和变量不会与全局命名空间中的同名函数和变量冲突。这种方式有助于避免命名冲突的问题。
  • RTLD_DEEPBINDdlopen()函数的选项之一,它的含义是:在加载共享库时,将该库的符号查找范围置于该库的符号表中,而不是全局符号表中。也就是说,当在共享库中使用符号时,会优先在该库自己的符号表中查找,而不是去全局符号表中查找。这种选项有助于解决符号冲突的问题。

选项可以组合使用,例如RTLD_LAZY | RTLD_LOCAL | RTLD_DEEPBIND,表示既使用懒加载方式加载库,又将库中的函数和变量定义为局部的, 以及…。

需要注意的是,dlopen()函数在不同的操作系统和平台上可能有所不同,具体的用法和选项可能会有所差异。因此,在使用时需要参考相应平台和系统的文档。