gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:08:27 24 4
gpt4 key购买 nike

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

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

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

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

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

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 .

关于c++ - ARM C++ newlibnano : Pure virtual function causes linker error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45819499/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com