5

我想实现以下目标:

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

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

4

1 回答 1

8

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

#define _GNU_SOURCE
#include <dlfcn.h>
void *dlvsym(void *handle, char *symbol, char *version);

函数 dlvsym() 的作用与 dlsym() 相同,但将版本字符串作为附加参数。 注意: C++ 符号名称应以包含参数列表的错位形式传递给 dlvsym()。不幸的是,GCC 损坏的名称(与 MSVC 不同)不包含返回类型。

有关详细信息,请参阅“dlopen(3) - Linux 手册页”

于 2011-02-17T23:11:19.480 回答