OMNeT++:未定义对 'typeinfo for inet::IMobility' 的引用
OMNeT++: undefined reference to `typeinfo for inet::IMobility'
我正在用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,它起作用了。为此:
- 导航到 OMNeT++ 的根文件夹
- 编辑文件"configure.user"并取消注释"CC=gcc"行(该行位于文件顶部附近(
- 运行 mingwenv.cmd(将打开一个新的命令窗口(
- 执行命令 "./configure" 和 "make"
此序列将编译器从 clang 更改为 gcc,重新编译资源并修复问题。
我必须强调我使用的是Windows 10。在Linux中不应该注意到同样的问题,默认编译器应该是gcc。
就问题的根源而言,它可能必须与有关RTTI(运行时类型信息(的标志做一些事情,应该启用该标志进行编译。我没有设法在 OMNeT++ 中为 clang 启用此功能,但更改编译器确实起到了作用。
相关文章:
- 将对象数组的引用传递给函数
- 什么时候在C++中返回常量引用是个好主意
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 何时在引用或唯一指针上使用移动语义
- 如何在c++中使用引用实现类似python的行为
- 编译C++时未定义的引用
- Ctypes wstring通过引用传递
- c++r值引用应用于函数指针
- 理解c++中的引用
- C++取消引用指针.为什么会发生变化
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 强制转换为引用类型
- 引用一个已擦除类型(void*)的指针
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 具有默认值的引用获取函数
- 如何使用基类指针引用派生类成员
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- OMNeT++:未定义对 'typeinfo for inet::IMobility' 的引用