You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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没有显式包含该头文件,编译器找不到对应符号声明就会终止编译。

修复步骤

  1. 编辑报错源文件util/tlm/src/sc_master_port.cc,在头部的include块中添加缺失的头文件引用:
#include "sim/clock.hh"

添加位置和其他gem5相关头文件保持同区块即可,不要混在systemc的第三方头文件引用段中,避免触发命名空间冲突
2. 清理tlm目录下的旧编译缓存:

scons -c
  1. 重新执行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 21:24:21