所以在本模块中__attribute__((weak))就派上了用场 int__attribute__((weak))func(...){return0; } 这样的话如果模块B提供了func就调用模块B的,如果没提供就调用本模块在中weak声明的 最后附上gcc官方文档: 在GCC的官方文档中,对weak和weakref的描述如下: http://gcc.gnu.org/onlinedocs/gcc/Function-...
// 不是强符号也不是弱符号,是外部变量引用externintext;// 弱符号intweak;// 强符号intstrong=1;// 弱符号(这种转化为弱符号的变量不能与全局变量:`int weak2 = 1;` 共存)int__attribute__((weak)) weak2 =2;// 强符号intmain() {return0; } 弱引用和强引用 未找到强引用符号的定义,链接器报...
深入探索GCC的attribute属性 如果经常看Linux源码,一定会见过 attribute属性,他在 Linux 里面出现的很多。 attribute 是 gcc 的扩展功能,它不属于标准C语言。 使用attribute 可以修饰变量、函数或者数据类型的属性,属性有很多,有些确实很有用。 找了几个可以修饰函数的属性,供大家参考下。 如果希望函数可以在 main 函...
__attribute__((weak)) 此项详细内容,在 __attribute__((weak)) 简介及作用 __attribute__((weak)) 用法
__attribute __(weak):定义可以在用户代码中覆盖的库函数 __attribute __(format):由printf使用并指出哪些args具有格式 __ attribute __(const):该函数不读取或修改任何全局内存 __attribute __(aligned(X)):增加结构或结构成员的对齐方式。最小对齐方式,以字节为单位。不能使用此属性来减少函数的对齐方式,而...
GCC中如果有多个 __attribute__ 属性要设置,只需要用逗号分隔开,写在同一个 __attribute__(()) 中即可。举例如下: 这是a.c 这是b.c 我们编译并dump一下: cc -c a.c && cc -c b.c && cc a.o b.o && objdump -S a.exe > a1.lss ...
int weak; int strong = 1; __attribute__((weak)) weak2 = 2; int main() { return 0; } 1. 2. 3. 4. 5. 6. 7. 8. 上面这段程序中,"weak"和"weak2"是弱符号,"strong"和"main"是强符号,而"ext"既非强符号也非弱符号,因为它是一个外部变量的引用。
弱符号也称为weak alias(弱别名)。怎样声明弱符号:通过alias,结合weak属性,声明⼀个弱符号,例如:1:int __centon()2: { 3:return 100;4: } 5:6:void centon() __attribute__ ((weak,alias("__centon")));这⾥centon是__centon的若别名。在C++⾥需要指定编译⽬标的”mangled name”。
GCC通过__attribute__((weak))指令定义的函数或变量称为弱符号(Weak Symbol),实际上这个指令大部分时候都是用来定义函数,很少用于定义变量。 编译器默认函数和初始化了的全局变量为强符号(Strong Symbol),未初始化的全局变量为弱符号(Weak Symbol)。
对于链接器来说,所有的全局符号可分为两种:强符号(Strong symbols),弱符号(Weak symbols)。gcc的attribute中有个__attribute__((weak)),就是用来声明这个符号是弱符号的。gcc手册中这样写道: The weak attribute causes the declaration to be emitted as a weak symbol rather than a global. This is primarily...