GCC属性“\u dl\u argv”和“\u dl\u argv\u internal”做什么?

GCC属性“\u dl\u argv”和“\u dl\u argv\u internal”做什么?,gcc,Gcc,\u dl\u argv和\u dl\u argv\u internal的目的是什么?看起来它们似乎与dlopen有关,但这就是我冒昧猜测的全部。它们是真的属性,还是我的命名法有问题 我一直在谷歌上搜索,我能找到的只是补丁和错误消息,但没有任何解释。是什么让你认为这是一个GCC属性 我在GCC资料中发现了这一点: extern char **_dl_argv_internal __attribute__ ((alias ("_dl_argv"))); 但是,这实际上发生在注释中,使用的属性是“

\u dl\u argv
\u dl\u argv\u internal
的目的是什么?看起来它们似乎与dlopen有关,但这就是我冒昧猜测的全部。它们是真的属性,还是我的命名法有问题


我一直在谷歌上搜索,我能找到的只是补丁和错误消息,但没有任何解释。

是什么让你认为这是一个GCC属性

我在GCC资料中发现了这一点:

extern char **_dl_argv_internal __attribute__ ((alias ("_dl_argv")));
但是,这实际上发生在注释中,使用的属性是“alias”,我甚至不确定这是否有效,因为“alias”不是一个文档化的属性类型(用于变量)

这两个符号在Glibc中都显示为变量。正如您推测的,它们与动态链接器有关,但与
dlopen
无关。事实上,这些是到动态链接器(通常类似于
/lib/ld linux.so.2
)的,正如
argv
是到用户代码中的
int main(int argc,char**argv)
。启动并运行一个动态链接器比使用一个名为
main
的函数要复杂得多,因此会涉及一些汇编代码和一些系统调用,但该变量最终会保持命令行参数不变。(事实上,动态链接器的工作就是在完成所有工作后调用
main
。)

这是否回答了你的问题,或者你指的是别的什么