ARM C++ newlibnano:纯虚函数导致链接器错误

ARM C++ newlibnano: Pure virtual function causes linker error

我正在使用 arm-none-eabi-g++ 版本 4.9.3 为 ARM Cortex M4 编译嵌入式应用程序。为了使目标图像尽可能小,我link应用-specs=nano.specs

现在我遇到了一个奇怪的问题:当我在代码的任何地方定义一个纯虚函数时(然后我在子 class 中定义它的主体),我得到这个 linking 错误:

abort.c:-1: Error: undefined reference to `_exit'
sbrkr.c:-1: Error: undefined reference to `_sbrk'
signalr.c:-1: Error: undefined reference to `_kill'
...

这是正确的,因为我确实没有在我的项目中定义这些功能,因为我根本不使用它们。但是为什么当我想制作一个纯虚函数时编译器需要这些函数呢?当我为虚函数定义一个空主体时,linker 错误就消失了。谁能给我解释一下纯虚函数背后的魔力?

编辑:为了让事情更清楚,这是我的代码的一个非常简单的例子:

class Parent {
public:
    virtual int foo() { return -1; } // This compiles normally.
    virtual int foo() = 0; // This gives me the linker error above.
}

class Child {
public:
    virtual int foo { return 42; }
}

Child test;

纯虚方法需要异常支持,因为有时可以调用它们。需要缺少的库函数来实现异常处理。 请参阅相关问题 here