关于esp-idf编译时ccache错误导致在libsodium库报poly1305.c.obj类文件找不到的问题

目录

 声明

问题描述

解决方法

 


 声明

 

本文仅用以记录个人针对该问题的猜测及处理办法,欢迎交流探讨,但若由于采用或借鉴此方法而导致的任何问题,本人不承担任何责任。

 

问题描述

由于最近在编译一个esp32的项目时,由于改动频繁,项目经常clean或者fullclean,或者重配menuconfig,然后重新编译,结果次次都出现下面的问题:

ccache: error: Failed to create temporary file for esp-idf/libsodium/CMakeFiles/__idf_libsodium.dir/libsodium/src/libsodium/crypto_box/curve25519xchacha20poly1305/box_curve25519xchacha20poly1305.c.obj: No such file or directory
[820/1325] Building C object esp-idf/libsodium/CMakeFiles/__idf_libsodium...rypto_box/curve25519xsalsa20poly1305/box_curve25519xsalsa20poly1305.c.obj
FAILED: esp-idf/libsodium/CMakeFiles/__idf_libsodium.dir/libsodium/src/libsodium/crypto_box/curve25519xsalsa20poly1305/box_curve25519xsalsa20poly1305.c.obj

针对该问题,我在esp32中文论坛有过记录,但鉴于论坛访问速度的问题,在这里也记录一下;

具体为何会出现这个错误,还没弄明白,😂;猜测可能是编译用到的工具或脚本对项目文件做了某些一致性检测所致……

解决方法

1. 在最早出现该问题时,我想到的是新加入的某些包引起的,正如我在论坛就该问题第一次回复的解决方法,删除引起问题的包并重建项目,貌似解决了问题,但如果包多呢……,所以,每次有一个稳定版本,就先保存下项目,再调试下一个包……,貌似这有点曲线救国的意思了。。

但好在,之后小心翼翼地,尽量不去clean操作,或者配置menuconfig,倒很少出现上述错误;

只是,过了若干天(记性不好),针对该项目添加了若干个包,并修改了一些配置之后,发现它竟然rebuild操作了……😭,结果可想而知,闪亮亮的FILED……又出现了,怀着忐忑的心情,一番操作之后,倒也正常了,但想着,按这个方法,有点累手(身心俱疲)……,所以发现了方法2

2. 重命名项目文件夹名

既然重建项目可以解决,就尝试了下重命名文件目录,发现果然可以……但陆陆续续修改了几次,发现新的问题,就是不能跟之前已经编译过的有问题的目录名一样,否则依然错误(一个项目目录,名字换的自己都记不住了),然后就想应该是有缓存做了记录,删除缓存应该就可以了,按照这个想法就有了方法3

3. 删除缓存文件

由于错误内容含有ccache,而esp-idf编译环境又用到ccache编译缓存工具【见.espressif/tools/ccache】,所以猜测可能由于ccache缓存导致的,马上搜索了下该工具……

ccache主页有该工具的介绍,具体我就不复制了,总之在编译时,ccache可能会将部分项目中的对象文件从之前的缓存中取出,而如果编译环境使用了其他的脚本导致冲突,可能就出错了(瞎扯吧……)

鉴于ccache的功效,每次编译新建项目,都会在默认的ccache目录【C:\Users\Administrator\AppData\Roaming\.ccache】创建对应的缓存记录,而重新编译会从该记录拿出用到的obj对象文件出来,因此如果删除该ccache目录下的所有文件(为什么全删,因为肉眼看不懂……😂),然后回到项目目录,重新编译,应该就ok了……

最后,可以采用3来处理,然后重新编译,目前暂时使用该方法来进行处理,没发现有其他影响

鉴于此,如果类似ccache的错误,或许也可以参考此方法处理

::21-06-06

发现在乐鑫论坛官方已对此进行了回复,证实上述问题的原因如下:

This problem with compilation of libsodioum on Windows occurs when:
1. path to ESP-IDF Tools (.espressif) is longer than 90 characters
2. path to ESP-IDF is longer than 90 characters
3. path to the project is longer than 90 characters

Tr:

在Windows上编译libsodioum时会出现此问题:
1.ESP-IDF工具(.espressif)的路径超过90个字符。
2.ESP-IDF的路径长度超过90个字符。
3.工程路径超过90个字符。
这似乎是ESP-IDF中较旧版本的CCache中的错误。

官方也给出了两个方案:

1. 不更改环境的情况下,可采用禁用ccache的方法

idf.py --no-ccache build

2. 采用新版本的idf

Please, change your environment so that all three conditions are met.

Please use a Windows installer to repair the existing ESP-IDF or install a new version of ESP-IDF. The installer contains several checks for the environment. If installation or build still fails, post the log from C:\Users\USER\AppData\Local\Temp\Setup Log DATE #NUMBER.txt

The latest stable version of the installer is available: https://dl.espressif.com/dl/esp-idf/
The beta development version of the installer is available: https://github.com/espressif/idf-installer/releases

本人这里暂时没有更新环境,但使用方案一是有效的。

<think>好的,我现在需要解决用户在ESP-IDF编译过程中遇到的ccache相关错误。根据用户提供的引用[1],问题出现在libsodiumpoly1305.c.obj文件不到,可能与ccache缓存有关。首先,我应该回顾ccache的基本作用,它是一个编译缓存工具,可以加速编译过程,但有时候缓存可能导致问题,尤其是当源代码或配置发生变化时。 接下来,用户提到错误信息涉及ccache,而ESP-IDF的编译环境确实使用了ccache,路径在.espressif/tools/ccache。因此,我的初步思路是清理ccache缓存,看看是否能解决问题。根据经验,可以尝试运行ccache -C来清除缓存。此外,ESP-IDF提供了idf.py clean和idf.py fullclean命令,这些可能也需要执行,以确保彻底清除旧的编译文件。 另外,用户提供的引用[2]中提到网络问题可能导致下载失败,但当前问题更直接与ccache相关。不过,也不能完全排除环境配置的问题。可能需要检查ccache的配置是否正确,比如是否启用了某些不兼容的选项。例如,ESP-IDF可能对ccache的版本有特定要求,需要确认安装的ccache版本是否兼容。 可能的解决方案步骤包括: 1. 清理ccache缓存和项目构建文件。 2. 暂时禁用ccache,以确认是否是ccache引起的问题。 3. 更新或重新安装ccache,确保版本合适。 4. 检查环境变量设置,确保ccache正确配置。 5. 如果问题持续,尝试手动删除相关缓存目录。 另外,需要指导用户如何执行这些步骤,例如如何设置环境变量禁用ccache,或者如何手动删除缓存文件。同时,应提醒用户在进行这些操作前备份项目,以防万一。 最后,需要验证这些解决方案是否有效,可能建议用户重新编译项目,观察是否仍然错。如果问题解决,可以重新启用ccache以提高编译速度,但需注意后续可能出现类似问题的处理方法。</think>### ESP-IDFccache相关错误的解决方案 当ESP-IDF编译过程中出现与ccache相关的错误(例如libsodium`poly1305.c.obj`文件不到),通常是由于ccache缓存损坏或版本不兼容导致。以下是逐步解决方案: --- #### 1. **清理ccache缓存和项目构建文件** - **清除ccache缓存**: 运行以下命令清除全局ccache缓存: ```bash ccache -C ``` 或删除ESP-IDF默认缓存目录: ```bash rm -rf ~/.ccache ``` - **清理项目构建文件**: 在项目目录下执行: ```bash idf.py clean # 清理常规构建文件 idf.py fullclean # 彻底清理所有生成文件(包括CMake配置) ``` --- #### 2. **临时禁用ccache** - **通过环境变量禁用**: 在编译命令前添加`CCACHE_DISABLE=1`禁用ccache: ```bash CCACHE_DISABLE=1 idf.py build ``` - **通过ESP-IDF配置禁用**: 运行`idf.py menuconfig`,进入`Compiler Options` → 取消勾选`Use ccache`。 --- #### 3. **更新或重新安装ccache** - **升级ccache版本**: 使用包管理器更新ccache(如Ubuntu): ```bash sudo apt-get update && sudo apt-get install --only-upgrade ccache ``` - **重新安装ESP-IDFccache工具**: 删除ESP-IDF工具目录下的ccache: ```bash rm -rf ~/.espressif/tools/ccache ``` 重新运行安装脚本: ```bash ./install.sh ``` --- #### 4. **验证环境变量配置** - 检查是否设置了冲突的环境变量(如`CC`或`CXX`): ```bash unset CC CXX # 临时取消相关变量 idf.py build ``` - 确保`CCACHE_DIR`指向有效路径(默认在`~/.ccache`)。 --- #### 5. **手动删除问题文件(进阶)** - 如果错误明确指向`poly1305.c.obj`等文件,尝试手动删除相关缓存文件: ```bash find ~/.ccache -name "*poly1305*" -delete ``` --- #### 6. **其他建议** - **检查网络问题**: ccache可能因网络问题导致缓存异常,可参考引用[2]中的方法切换网络或手动安装组件[^2]。 - **回退ESP-IDF版本**: 若问题在特定版本出现,尝试使用稳定版本: ```bash git checkout v4.4.1 # 替换为已知稳定版本号 ``` --- ### 总结 1. **优先清理缓存**(ccache和项目构建目录)。 2. **临时禁用ccache**以确认问题根源。 3. **更新工具链**或重新安装ccache。 4. 若仍失败,可彻底禁用ccache并提交问题ESP-IDF[^1]。 ---
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值