我必须使用dlsym从外部库加载函数名。
但我担心的是他的功能是通过宏#define来定义的。
假设dlopen调用成功,在这种情况下,dlsym是否会使用#defined名称找到正确的符号?
以下是包含#defined函数名称的头文件:
#define LogVPrintDebug(context, fmt, args) \
(void) LogVPrint(context, kLevel_Debug, fmt, args)
LogErr LogVPrint_(LogContext context, LogLevel level,
const char* fmt, va_list args) __attribute__ ((deprecated));
和LogVPrint是实际的功能。
答案 0 :(得分:2)
当然dlsym
无法找到#define
- d符号,因为C编译器正在从之前扩展的预处理阶段开始#define
- d宏。因此,当编译使用该名称的代码时,将使用预处理的名称(并且该名称仅出现在共享对象中)