Pei*_*ein 4 versioning linker shared-libraries name-mangling dlopen
我希望实现如下所示:
我有一个库的多个版本.我使用dlopen()动态加载最新版本的库.然后我想看看该版本中是否存在特定函数(以及类似的返回类型和参数列表).如果它然后打开它,否则回退到以前的版本检查相同.
我在"版本脚本"上看过一些帖子,但我无法使用它.此外,我认为搜索符号表将不是一个解决方案,因为它只检查那里的函数名称.
这里有符号版本控制的好解释.您需要GNU扩展中的dlvsym()函数来按名称和版本搜索符号:
#define _GNU_SOURCE
#include <dlfcn.h>
void *dlvsym(void *handle, char *symbol, char *version);
Run Code Online (Sandbox Code Playgroud)
函数dlvsym()与dlsym()的作用相同,但是将版本字符串作为附加参数. 注意: C++符号名称应以包含参数列表的错位形式传递给dlvsym().不幸的是,GCC损坏的名称(与MSVC不同)不包含返回类型.
有关更多信息,请参阅"dlopen(3) - Linux手册页".