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

Yocto编译TensorFlow时zipfile.py出现struct.error错误该如何解决

根因说明

你遇到的struct.error: ushort format requires 0 <= number <= (0x7fff * 2 + 1)报错,本质是zipfile模块的FileHeader方法在打包时,某个需要用16位无符号整数存储的字段值超出了0~65535的合法范围。结合你之前修改zipfile源码修复时间戳的操作,触发问题的核心原因是直接修改系统原生zipfile模块引入了兼容冲突,同时没有从构建流程层面统一处理时间戳问题。

可行解决方案
  • 第一步先还原你对recipe-sysroot-native/usr/lib/python3.8/zipfile.py的所有修改,不要直接修改Yocto构建过程中生成的临时系统库文件,这类修改会被构建流程自动重置,还会引入不可预期的兼容问题。
  • 在Yocto的conf/local.conf中添加全局配置:
    SOURCE_DATE_EPOCH = "315532800"
    
    这个值对应1980-01-01 00:00:00的UNIX时间戳,Yocto会在整个构建流程中统一将所有生成文件的时间戳设为该值,从根源解决zip打包的时间戳报错,不需要修改zipfile源码。
  • 如果报错发生在TensorFlow wheel包打包阶段,可在TensorFlow的.bb或.bbappend文件的构建步骤前添加环境变量配置:
    export ZIP_TIMESTAMP="1980-01-01 00:00:00"
    
    TensorFlow 1.13版本的构建脚本会直接读取该变量作为zip打包的默认时间。
  • 如果仍报错,在TensorFlow构建的do_configure前置步骤中添加批量修改源码时间戳的操作:
    find ${S} -type f -exec touch -d "1980-01-01 00:00:00" {} \;
    
  • 若打包的文件数量超过65535或单文件大小超过4G,需要在构建脚本调用ZipFile的位置添加allowZip64=True参数,关闭16位字段长度限制。

内容的提问来源于stack exchange,提问作者Cheran Prakasam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:12:01