2016-01-20 184 views
5

所以我希望通过gcc编译器的源和我在fork.c沿着这来了:什么是weak_alias功能做的,它在哪儿定义

int 
__fork() 
{ 
    __set_errno (ENOSYS); 
    return -1; 
} 
libc_hidden_def (__fork) 
stub_warning (fork) 

weak_alias (__fork, fork) 
#include <stub-tag.h> 

我想图了解weak_alias的功能。我用grep命令glibc的源文件里面找到的#define weak_alias的所有出现:宏

grep -r "#define weak_alias" 

我发现许多事件:

#define weak_alias(n, a) 

但宏别实际上什么都不解释他们只是定义了他们没有说明如何被替换的声明。例如,一个发生在profil.c:

/* Turn off the attempt to generate ld aliasing records. */ 
#undef weak_alias 
#define weak_alias(a,b) 

所以任何想法也和它被定义什么weak_alias?提前

+0

的[需要用glibc源帮助]可能的复制(http://stackoverflow.com/questions/6515583/need-help-with-glibc-source) –

+0

谢谢。检查了谷歌的前10页,并没有看到这一点。 – Programmer123

回答

8

由于从https://github.com/lattera/glibc/blob/master/include/libc-symbols.h

/* Define ALIASNAME as a weak alias for NAME. 
    If weak aliases are not available, this defines a strong alias. */ 
# define weak_alias(name, aliasname) _weak_alias (name, aliasname) 
# define _weak_alias(name, aliasname) \ 
    extern __typeof (name) aliasname __attribute__ ((weak, alias (#name))); 

关于弱符号:

https://en.wikipedia.org/wiki/Weak_symbol

+0

正是我在找的东西。谢谢。 – Programmer123