这可以优雅地编译:
class dummy {
};
这抱怨对 _sbrk 的未定义引用:
class dummy {
virtual ~dummy();
};
为什么虚拟方法会生成未定义的引用_sbrk
?
我曾经认为它vtable
是静态分配的,不需要malloc
.
编译器:arm-none-eabi-gcc 8.0.0
使用最近的newlib
. 编译-fno-rtti -fno-exceptions -fno-unwind-tables
。
测试程序(boot
就像main
):
class base {
public:
virtual ~base();
};
class dummy : public base {
public:
~dummy();
};
base::~base() {
__BKPT();
}
dummy::~dummy() {
__BKPT();
}
extern "C" void _sbrk() {
__BKPT();
}
void boot() {
for(;;) {
base b;
dummy d;
}
return 0;
}