什么是glibc GLRO宏?

ric*_*ick 5 c glibc

我目前正在尝试了解glibc启动例程(__libc_start_main)如何处理Elf辅助矢量类型(auxv_t).

浏览glibc的源代码,我找到了一些名为GLRO的函数的引用.在尝试追踪此函数的定义时,我能找到的最接近的是

#define GLRO(x) _##x
Run Code Online (Sandbox Code Playgroud)

当我搜索" ## x"时,我发现的是其他类似的"#define"指令,让我感到困惑.这个定义是什么意思?" ## x"是某种编译器指令吗?

小智 8

Kerrek SB的答案提供了它的功能,但不是宏的目的.所以这里是:

"GLRO()宏用于访问全局或本地只读数据,请参阅sysdeps/generic/ldsodefs.h."

资料来源:http://cygwin.com/ml/libc-help/2012-03/msg00006.html


Ker*_* SB 5

这是一个预处理器宏。

您可以通过运行预处理器来亲自了解它的作用。只需制作一个示例文件,如下所示:

// foo.c
#include <some_glibc_header.h>

GLRO(hello)
Run Code Online (Sandbox Code Playgroud)

现在运行预处理器:

gcc -E foo.c
Run Code Online (Sandbox Code Playgroud)

您将看到该宏通过在给定标记前面添加下划线来创建一个新标记;在我们的示例中,我们获得_hello. 预##处理器运算符连接标记。