Linker 如何实现符号版本控制

Linker 如何实现符号版本控制,linker,versioning,shared-libraries,dlopen,name-mangling,Linker,Versioning,Shared Libraries,Dlopen,Name Mangling,我想实现以下目标: 我有一个库的多个版本。我使用dlopen()动态加载库的最新版本。然后,我想看看该版本中是否存在特定的函数(以及类似的返回类型和参数列表)。如果打开了,则返回到以前的版本进行检查。 我看过一些关于“版本脚本”的帖子,但我无法使用它。另外,我认为搜索符号表并不是一个解决方案,因为它只检查函数名。对符号版本控制有很好的解释。您需要GNU扩展的dlvsym()函数按名称和版本搜索符号: #define _GNU_SOURCE #include <dlfcn.h> vo

我想实现以下目标:

我有一个库的多个版本。我使用dlopen()动态加载库的最新版本。然后,我想看看该版本中是否存在特定的函数(以及类似的返回类型和参数列表)。如果打开了,则返回到以前的版本进行检查。


我看过一些关于“版本脚本”的帖子,但我无法使用它。另外,我认为搜索符号表并不是一个解决方案,因为它只检查函数名。

对符号版本控制有很好的解释。您需要GNU扩展的dlvsym()函数按名称和版本搜索符号:

#define _GNU_SOURCE
#include <dlfcn.h>
void *dlvsym(void *handle, char *symbol, char *version);
定义GNU源
#包括
void*dlvsym(void*句柄,char*符号,char*版本);
函数dlvsym()的作用与dlsym()相同,但将版本字符串作为附加参数。 <强> >注意:< /Stult> C++符号名称应传递到包含参数列表的DLVScript()中。不幸的是,GCC损坏的名称(与MSVC不同)不包含返回类型

有关更多信息,请参阅。

相关