gem5 util/tlm目录执行scons编译报sim_clock未声明错误如何解决
gem5 util/tlm 模块scons编译sim_clock未声明错误修复
已执行操作记录
- 根目录执行
scons build/ARM/gem5.opt:完成 - 根目录执行
scons --with-cxx-config --without-python --without-tcmalloc USE_SYSTEMC=0 build/ARM/libgem5_opt.so:完成 - 执行
cd util/tlm切换到tlm模块目录 - 目录内执行
scons触发编译失败,核心报错如下:
build/tlm/sc_master_port.cc: In member function 'void Gem5SystemC::SCMasterPort::b_transport(tlm::tlm_generic_payload&, sc_core::sc_time&)': build/tlm/sc_master_port.cc:278:32: error: 'gem5::sim_clock' has not been declared (double)(ticks / gem5::sim_clock::as_int::ps), sc_core::SC_PS); ^~~~~~~~~ scons: *** [build/tlm/sc_master_port.o] Error 1
根因
gem5::sim_clock类的定义存放在sim/clock.hh头文件中,旧版本gem5会通过其他公共头文件间接引入该头文件,新版本调整头文件依赖关系后,util/tlm/src/sc_master_port.cc没有显式包含该头文件,编译器找不到对应符号声明就会终止编译。
修复步骤
- 编辑报错源文件
util/tlm/src/sc_master_port.cc,在头部的include块中添加缺失的头文件引用:
#include "sim/clock.hh"
添加位置和其他gem5相关头文件保持同区块即可,不要混在systemc的第三方头文件引用段中,避免触发命名空间冲突
2. 清理tlm目录下的旧编译缓存:
scons -c
- 重新执行
scons编译即可。
兜底校验方案
如果按上述步骤修改后仍出现同类符号未声明错误,先检查gem5源码版本一致性:
- 确认编译
gem5.opt、libgem5_opt.so和当前tlm模块用的是同一份gem5源码、同一个commit版本,跨版本混编会出现大量符号不匹配问题 - 版本不一致时回退到gem5根目录执行全量清理重编:
# 回到gem5根目录 cd ../.. # 清理旧编译产物 scons -c rm -rf build/ARM # 并行重编依赖目标,-j后数值根据自身CPU核数调整 scons build/ARM/gem5.opt -j$(nproc) scons --with-cxx-config --without-python --without-tcmalloc USE_SYSTEMC=0 build/ARM/libgem5_opt.so -j$(nproc) # 回到tlm目录重编 cd util/tlm scons -c scons
内容的提问来源于stack exchange,提问作者ssg
相关产品推荐
相关产品推荐

