【问题标题】:OMNeT++: undefined reference to `typeinfo for inet::IMobility'OMNeT++:未定义的对 `typeinfo for inet::IMobility' 的引用
【发布时间】:2019-03-11 10:45:14
【问题描述】:

我正在使用 INET 框架在 OMNeT++ 中模拟网络。我有一个复合模块作为网络节点,由一个简单的模块/节点和移动模块组成。我想用以下代码获取节点的位置:

void node::initialize()
{
    cModule *host = getContainingNode(this);
    IMobility *mobility = check_and_cast<IMobility *>(host->getSubmodule("mobility"));
    Coord selfPosition = mobility->getCurrentPosition();
}

我还包括了“inet/mobility/contract/IMobility.h”。

应该很简单,但是构建失败并显示以下内容:

../out/clang-release/src/node.o:(.text[_ZN7omnetpp14check_and_castIPN4inet9IMobilityENS_7cModuleEEET_PT0_]+0x18): undefined reference to `__imp__ZTIN4inet9IMobilityE'
../out/clang-release/src/node.o:(.rdata[_ZTIPN4inet9IMobilityE]+0x18): undefined reference to `typeinfo for inet::IMobility'

我知道这与编译器有关,但不清楚如何在 OMNeT++ 环境中解决这个问题。有什么想法吗?

【问题讨论】:

标签: c++ simulation omnet++ inet


【解决方案1】:

我找到了一种解决方法,以防有人感兴趣。我将编译器从 clang 更改为 gcc 并且它工作。为了做到这一点:

  1. 导航到 OMNeT++ 的根文件夹
  2. 编辑文件“configure.user”并取消注释“CC=gcc”行(该行位于文件顶部附近)
  3. 运行 mingwenv.cmd(将打开一个新的命令窗口)
  4. 执行命令“./configure”和“make”

此序列将编译器从 clang 更改为 gcc,重新编译资源并修复问题。

我必须强调我使用的是 Windows 10。同样的问题在 Linux 中不应该被注意到,默认编译器应该是 gcc。

就问题的根源而言,它可能需要对有关 RTTI(运行时类型信息)的标志做一些事情,应该启用该标志以进行编译。我没有设法在 OMNeT++ 中为 clang 启用此功能,但更改编译器可以解决问题。

【讨论】:

    猜你喜欢
    • 2021-02-16
    • 2010-09-23
    • 2013-02-26
    • 2016-10-19
    • 2014-06-04
    • 1970-01-01
    • 1970-01-01
    • 2017-06-25
    • 2016-09-18
    相关资源
    最近更新 更多