OMNeT++集成Veins-Inet项目构建失败问题求助
问题描述
构建包含Inet-4.2.2、Simu5G-1.1.0和veins-5.1的OMNeT++项目时,出现以下链接错误:
veins::TraCIScenarioManagerLaunchd类的多个虚函数未定义(如finish()、init_traci()、析构函数等)SignalCallbackListener相关虚表未找到
单独使用Simu5G 1.1.0与Inet 4.2.2可正常运行,导入Veins和Veins-Inet后触发问题,完整错误日志:
Creating shared library: ../out/clang-release/src/libveins_inet.dll ../out/clang-release/src/veins_inet/VeinsInetManager.o:(.rdata+0x7f8): undefined reference to `virtual thunk to veins::TraCIScenarioManagerLaunchd::finish()' ../out/clang-release/src/veins_inet/VeinsInetManager.o:(.rdata+0xc80): undefined reference to `virtual thunk to veins::TraCIScenarioManagerLaunchd::init_traci()' ../out/clang-release/src/veins_inet/VeinsInetManager.o:(.rdata+0x12e8): undefined reference to `virtual thunk to veins::TraCIScenarioManagerLaunchd::~TraCIScenarioManagerLaunchd()' ../out/clang-release/src/veins_inet/VeinsInetManager.o:(.rdata+0x12f0): undefined reference to `virtual thunk to veins::TraCIScenarioManagerLaunchd::~TraCIScenarioManagerLaunchd()' ../out/clang-release/src/veins_inet/VeinsInetManager.o:(.rdata+0x13d8): undefined reference to `virtual thunk to veins::TraCIScenarioManagerLaunchd::initialize(int)' ../out/clang-release/src/veins_inet/VeinsInetManager.o:(.rdata+0x13f0): undefined reference to `virtual thunk to veins::TraCIScenarioManagerLaunchd::finish()' ../out/clang-release/src/veins_inet/VeinsInetManager.o:(.rdata+0x1878): undefined reference to `virtual thunk to veins::TraCIScenarioManagerLaunchd::init_traci()' ../out/clang-release/src/veins_inet/VeinsInetManager.o:(.text[_ZN5veins22SignalCallbackListenerIPN7omnetpp7cObjectEEC2ESt8functionIFvNS_13SignalPayloadIS3_EEEEPNS1_7cModuleEi]+0x25): undefined reference to `__imp__ZTVN5veins22SignalCallbackListenerIPN7omnetpp7cObjectEEE' clang++.exe: error: linker command failed with exit code 1 (use -v to see invocation) make[1]: *** [Makefile:136: ../out/clang-release/src/libveins_inet.dll] Error 1 make[1]: Leaving directory '/c/Users/hadil/OneDrive/Desktop/5G/veins_inet/src' make: *** [Makefile:36: all] Error 2 "make MODE=release all" terminated with exit code 2. Build might be incomplete.
解决方案
确保Veins 5.1已正确构建
先单独构建Veins 5.1,选择与项目一致的构建模式(如release),确认Veins的输出目录下生成了完整的库文件(如libveins.dll)。构建时不要中断,确保所有编译单元都完成编译。修正Veins-Inet的依赖配置
打开Veins-Inet的Makefile,检查VEINS_DIR变量是否指向Veins 5.1的根目录,确保链接选项中包含-lveins且路径正确。同时保证构建模式统一:如果Veins用release模式构建,Veins-Inet和主项目也必须用release模式,禁止混合debug和release库。排查Simu5G与Veins的兼容性冲突
先移除Simu5G,单独构建Veins+Veins-Inet+Inet-4.2.2的组合,确认是否能正常编译链接。如果可以,再逐步引入Simu5G,检查是否是Simu5G的构建配置覆盖了Inet或Veins的编译选项。可尝试调整Simu5G的Makefile,避免与Veins的符号冲突。确保编译时开启RTTI支持
虚表和虚函数依赖RTTI(运行时类型信息),检查Veins、Veins-Inet、Simu5G和主项目的编译选项,确认clang编译时添加了-frtti参数,保证所有组件的RTTI开启状态一致。
内容的提问来源于stack exchange,提问作者Hadil Hantour

