我正在使用第三方共享库,我需要检查共享库是否以编程方式导出函数。
如何做到这一点。我需要这个,因为如果函数不存在,我需要在本地运行一些其他函数。
答案 0 :(得分:2)
您可以使用dlsym来实现此目的。
如果使用dlopen加载库,则将使用它返回的句柄。
如果你链接到这个库,你可以使用特殊的伪句柄(10x到caf来指出它):
来自dlsym man:
有两个特殊的伪句柄,RTLD_DEFAULT和RTLD_NEXT。前者将使用默认库搜索顺序找到所需符号的第一个匹配项。后者将在当前库之后的搜索顺序中找到下一个函数。这允许人们在另一个共享库中的函数周围提供包装。
答案 1 :(得分:0)
检查目标库的头文件以获取函数签名。 使用dlopen,您可以动态加载库并获取符号,如果它在库中公开,随后调用dlsym和dlclose。
答案 2 :(得分:0)
可能是您可以使用objdump命令来检查所有暴露的符号 objdump -T libtest.so