摘要:
让我们总结一下:编译器把一个cpp编译为目标文件的时候,除了要在目标文件里写入cpp里包含的数据和代码,还要至少提供3个表:未解决符号表,导出符号表和地址重定向表。 未解决符号表提供了所有在该编译单元里引用但是定义并不在本编译单元里的符号及其出现的地址。 导出符号表提供了本编译单元具有定义,并且愿意 阅读全文
posted @ 2018-01-11 18:50
zzfx
阅读(566)
评论(0)
推荐(0)
摘要:
库是没有链接的编译单元的集合 1.弱符号与强符号 对C/C++而言,编译器默认函数和初始化了的全局变量为强符号。未初始化的全局变量为弱符号。此处弱符号与强符号均是针对定义来说的,不是针对符号的引用。也可以通过GCC的 “__attribute__((weak))”来定义任何一个强符号为弱符号。 [c 阅读全文
posted @ 2018-01-11 18:25
zzfx
阅读(687)
评论(0)
推荐(0)
摘要:
1. 强符号和弱符号 1.1 u-boot和kernel中的__weak指令 u-boot和kernel比较普遍地使用了__weak来定义函数。 在include\linux\compiler-gcc.h中__weak是这样定义的: #define __weak __attribute__((wea 阅读全文
posted @ 2018-01-11 18:07
zzfx
阅读(1412)
评论(0)
推荐(0)
摘要:
注意,强符号和弱符号都是针对定义来说的,不是针对符号的引用。 一、概述 在C语言中,函数和初始化的全局变量(包括显示初始化为0)是强符号,未初始化的全局变量是弱符号。 对于它们,下列三条规则使用: ① 同名的强符号只能有一个,否则编译器报"重复定义"错误。 ② 允许一个强符号和多个弱符号,但定义会选 阅读全文
posted @ 2018-01-11 17:59
zzfx
阅读(459)
评论(0)
推荐(0)