首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ARM C++ newlibnano:纯虚函数导致链接器错误

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

Stack Overflow用户
提问于 2017-08-22 21:48:59
回答 1查看 729关注 0票数 2

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

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

代码语言:javascript
复制
abort.c:-1: Error: undefined reference to `_exit'
sbrkr.c:-1: Error: undefined reference to `_sbrk'
signalr.c:-1: Error: undefined reference to `_kill'
...

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

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

代码语言:javascript
复制
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;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-22 22:28:30

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45819499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档