使用#defined函数名作为dlsym的输入

时间:2014-09-24 07:18:37

标签: c dlopen

我必须使用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是实际的功能。

1 个答案:

答案 0 :(得分:2)

当然dlsym 无法找到#define - d符号,因为C编译器正在从之前扩展的预处理阶段开始#define - d宏。因此,当编译使用该名称的代码时,将使用预处理的名称(并且该名称仅出现在共享对象中)