连接INET的OMNeT ++问题

时间:2017-11-27 15:23:02

标签: omnet++ inet

在构建我的新OMNeT++项目期间,我遇到了以下错误:

out/clang-debug//myUdp.o:(.rdata[_ZTI5myUdp]+0x10): undefined reference to 'typeinfo for inet::ApplicationBase'

我已经配置了INET引用(项目" myUdp" - >属性 - >项目参考 - > inet复选框已选中)

这是INET Makemake配置: Target tabCompile tab

这是我项目的Makemake配置(myUdp): Compile tabLink tab

和C ++代码:

MyUdp.cc

#include <inet/applications/udpapp/UDPBasicApp.h>
class myUdp: public inet::UDPBasicApp {
};
Define_Module(myUdp);

MyUdp.ned

import inet.applications.udpapp.UDPBasicApp;
simple myUdp extends UDPBasicApp {
    @class(myUdp);
}

有人可以帮我解决这个错误吗?

1 个答案:

答案 0 :(得分:0)

这可能是因为UDPBasicApp的方法被定义为virtual

比较来自http://gcc.gnu.org/onlinedocs/gcc/Vague-Linkage.html的“模糊链接”的GCC信息,例如这部分:

  

type_info个对象

     

C ++需要有关要写出的类型的信息   实现dynamic_casttypeid和异常处理。对于   多态类(具有virtual函数的类),type_info   对象与vtable一起写出,以便dynamic_cast可以   在运行时确定类对象的动态类型。对全部   在其他类型中,我们在使用时写出type_info对象:何时   将typeid应用于表达式,抛出对象或引用   到catch子句或异常规范中的类型。

您需要为基类中的虚函数提供定义(UDPBasicApp)或将它们声明为纯,因为编译器(在您的情况下为GCC或Clang)正在尝试为翻译单元确定正确的方法(然后创建vtable和typeinfo对象,并且它无法正确地确定它。