OMNeT++:未定义对 'typeinfo for inet::IMobility' 的引用

OMNeT++: undefined reference to `typeinfo for inet::IMobility'

本文关键字:IMobility 引用 inet for 未定义 OMNeT++ typeinfo      更新时间:2023-10-16

我正在用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++环境中解决这个问题。有什么想法吗?

我找到了一种解决方法,以防有人感兴趣。我将编译器从 clang 更改为 gcc,它起作用了。为此:

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

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

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

就问题的根源而言,它可能必须与有关RTTI(运行时类型信息(的标志做一些事情,应该启用该标志进行编译。我没有设法在 OMNeT++ 中为 clang 启用此功能,但更改编译器确实起到了作用。