什么是`.`和`*`表示在c宏中?

时间:2012-10-14 13:03:46

标签: c linux macros kernel ld

来自here c {宏}中.*的含义是什么?

583 #define INITCALLS                                                       \
584         *(.initcallearly.init)                                          \
585         VMLINUX_SYMBOL(__early_initcall_end) = .;                       \
586         *(.initcall0.init)                                              \
587         *(.initcall0s.init)                                             \
588         *(.initcall1.init)                                              \
589         *(.initcall1s.init)                                             \
590         *(.initcall2.init)                                              \
591         *(.initcall2s.init)                                             \
592         *(.initcall3.init)                                              \
593         *(.initcall3s.init)                                             \
594         *(.initcall4.init)                                              \
595         *(.initcall4s.init)                                             \
596         *(.initcall5.init)                                              \
597         *(.initcall5s.init)                                             \
598         *(.initcallrootfs.init)                                         \
599         *(.initcall6.init)                                              \
600         *(.initcall6s.init)                                             \
601         *(.initcall7.init)                                              \
602         *(.initcall7s.init)
603 

1 个答案:

答案 0 :(得分:5)

它是一个链接描述文件。部分合并和放置由链接器完成。程序员可以通过链接描述文件控制各部分的合并方式以及它们在内存中的位置。你提到的文件正是这样做的。

。(点)是指链接部分,使用通配符*而不是单独指定包含相同命名链接部分的多个文件名。

参考:http://sources.redhat.com/binutils/docs-2.10/ld_3.html