安装的便携版Arduino,添加esp8266开发板后,编译时出现如下报错:
d:\arduino-portable\1.8.15\portable\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.0-newlib4.0.0-gnu23-48f7b08\xtensa-lx106-elf\include\c++\10.2.0\cstdlib:41:10:fatal error: bits/c++config.h: No such file or directory 41 | #include <bits/c++config.h> | ^~~~~~~~~~~~~~~~~~ compilationterminated. 所有版本:Arduino IDE 1.8.15 portable + esp8266 3.0.0
也不知其他人有没有遇到该问题? 有可能是因为我使用的便携版。经过几番摸索定位到问题原因,在此分享下,希望能帮助到,节省到他人的时间。
问题分析: 头文件找不到,一般就是头文件所在的目录没有加到编译配置中。 找到esp8266的安装位置,上述报错已经透露了其安装位置。而且,根据官方文档,它一定在portable目录下。
顺便一下portable文件夹,在往后的arduino中所有sketches,库和其他cores将安装在portable中。可以复制整个主文件夹,并将其随身携带到任何位置:它将保留所有设置,库,cores和sketches。
找到其platform.txt, 这个文件里定义了编译步骤,以及编译使用的编译选项。我的位于:portable\packages\esp8266\hardware\esp8266\3.0.0\ 部分内容展示见附件。
注意到该平台使用的编译器:xtensa-lx106-elf-g++ 其头文件搜索目录添加的很少(使用-I),大多数在include下,最关键的是这个:portable\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.0-newlib4.0.0-gnu23-48f7b08\xtensa-lx106-elf\include,该目录下正好有个bits目录,但是空的。
而报错的bits/c++config.h文件位于和bits同级的c++目录内,具体是:c++\10.2.0\xtensa-lx106-elf\bits\c++config.h,这目录显然是编译器找不到的。可以确定该platform.txt配置的有问题,也可能是编译器版本和项目版本不匹配导致的。
权宜之计: 将portable\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.0-newlib4.0.0-gnu23-48f7b08\xtensa-lx106-elf\include\c++\10.2.0\xtensa-lx106-elf\bits中的头文件拷贝到portable\packages\esp8266\tools\xtensa-lx106-elf-gcc\3.0.0-newlib4.0.0-gnu23-48f7b08\xtensa-lx106-elf\include\bits。 另外,还有个c++\10.2.0\bits目录,虽然其也是头文件搜索目录,但尝试把c++\10.2.0\xtensa-lx106-elf\bits中的头文件拷贝进去后,引发了新的问题。
值得说明的是,这个解决办法虽然奏效,但显然有些暴力,是不得已而为之的。希望该项目的开发者在将来的版本中能尽快修复这个问题,免得如此大费周章。
|