von 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)));
Über schwaches Symbol:
https://en.wikipedia.org/wiki/Weak_symbol
Es ist ein Makro, das Folgendes tut:
Es deklariert eine schwache Funktion, wenn Sie keinen starken Symbolnamen für diese Funktion angegeben haben, wird es die Funktion aufrufen, auf die Sie es gelegt haben. zum Beispiel
int _foo(){ return 1;}
//And weak alias
int __attribute__((weak, alias("_foo"))) foo();
Wenn Sie also keine tatsächliche Implementierung für foo bereitgestellt haben, wird es im Grunde genommen _foo verwenden und 1 zurückgeben.