2016-01-20 2 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> 

Я пытаюсь понять что делает слабые_линии. Я использовал команду 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 страниц Google и не видел этого. – 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