目录
声明
本文仅用以记录个人针对该问题的猜测及处理办法,欢迎交流探讨,但若由于采用或借鉴此方法而导致的任何问题,本人不承担任何责任。
问题描述
由于最近在编译一个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中的错误。
官方也给出了两个方案:
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
本人这里暂时没有更新环境,但使用方案一是有效的。