NS-3.33与waf3-2.0.21兼容性报错问题及解决方案咨询
错误原因说明
该报错并非ns-3.33与自带的waf3-2.0.21版本不兼容导致,核心诱因是系统默认Python版本过高:ns-3.33发布时仅适配Python 2.7、Python 3.5/3.6版本,当使用Python 3.7及以上版本执行构建时,waf的任务生成器属性绑定逻辑发生变动,无法正常挂载headers属性,最终触发属性不存在的报错。
报错日志参考
编译过程中抛出的完整错误片段如下:
File "/home/~/ns-allinone-3.33/ns-3.33/.waf3-2.0.21-c6c9a875365426e5928462b9b74d40b5/waflib/TaskGen.py", line 123, in post v() File "/home/~/ns-allinone-3.33/ns-3.33/src/wscript", line 724, in apply_ns3moduleheader for source in sorted(ns3headers.headers): AttributeError: 'task_gen' object has no attribute 'headers'
可行解决方法
- 方法1:使用兼容版本Python编译
提前在系统中安装Python 3.6版本,编译全程显式指定该版本解释器,避免调用高版本Python:# 清理旧构建缓存 ./waf clean # 执行构建配置 python3.6 ./waf configure --enable-examples --enable-tests # 执行编译 python3.6 ./waf build - 方法2:修改构建脚本适配高版本Python
如果不想安装旧版本Python,可直接修改源码内的构建脚本:打开ns-3.33/src/wscript文件,定位到apply_ns3moduleheader函数定义位置,在遍历headers的逻辑前增加属性存在性判断,修改后的对应代码段如下:
修改完成后清理缓存,重新执行configure、build流程即可正常完成编译。def apply_ns3moduleheader(self): # 新增以下2行兜底逻辑 if not hasattr(self, 'headers'): return # 原有逻辑保持不变 for source in sorted(ns3headers.headers): # 后续原有代码无需改动
内容的提问来源于stack exchange,提问作者Jie Chen
相关产品推荐
相关产品推荐

