【发布时间】:2011-06-14 12:19:26
【问题描述】:
我正在尝试在嵌入式目标 (ARM Cortex-M3) 上添加全局构造函数支持。 假设我有以下代码:
class foobar
{
int i;
public:
foobar()
{
i = 100;
}
void inc()
{
i++;
}
};
foobar foo;
int main()
{
foo.inc();
for (;;);
}
我是这样编译的:
arm-none-eabi-g++ -O0 -gdwarf-2 -mcpu=cortex-m3 -mthumb -c foo.cpp -o foo.o
当我使用 objdump 查看 .init_array 部分时,它显示 .init_section 的大小为零。
我确实得到了一个名为 _Z41__static_initialization_and_destruction_0ii 的符号。
当我反汇编目标文件时,我看到全局构造是在 static_initialization_and_destruction 符号中完成的。
为什么 .init_section 中没有给这个符号添加一个指针?
【问题讨论】:
-
您认为 gcc 不够聪明,无法 1) 看到值是 100,或者 2) 看到值只是增加但从未使用过?
-
@Bo Persson:这就是我添加 -O0 选项的原因,所以 gcc 不会优化它。
标签: c++ gcc constructor