【发布时间】:2015-09-18 17:15:37
【问题描述】:
当编译器找到一个静态初始化器时,它会将它放在一个特殊的部分中。该部分的名称类似于“.CRT$XCU”。链接器将按节名称的字母顺序定位所有节。
当我想实现初始化功能时。为此,我介绍了两个部分:
typedef void(*PVF)();
#pragma data_seg(".CRT$XAA")
PVF _init_begin[] = { 0 };
#pragma data_seg(".CRT$XZZ")
PVF _init_end[] = { 0 };
当链接器正确排序该部分时,在_init_begin 和_init_end 之间会有一个指向初始化器的指针。
问题是这些部分是使用属性0xC0300040 创建的,即可以进行写/读/执行访问。但是编译器会发出带有属性0x40300040 的部分“.CRT$XCU”。这会导致链接器将这些部分放在一起。
我已经尝试使用这个 pragma 定义该部分:
#pragma section(".CRT$XAA",execute,read)
但这不会在 .obj 文件中创建任何部分“.CRT$XAA”。
如何创建具有所需属性的部分?
【问题讨论】:
标签: visual-c++ arm