これは正常にコンパイルされます。
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;
}