breakstring/eInkCalendarOfToxicSoul

编译报错,ToxicSoulCount未定义标识符。

Opened this issue · 11 comments

{
"resource": "/D:/eInkCalendarOfToxicSoul-main/src/main.cpp",
"owner": "C/C++",
"code": "20",
"severity": 8,
"message": "未定义标识符 "ToxicSoulCount"",
"source": "C/C++",
"startLineNumber": 702,
"startColumn": 20,
"endLineNumber": 702,
"endColumn": 34
}

这看起来还是您的环境问题,按理说直接Clone项目后用安装了PlatformIO插件的VSC打开后直接就可以编译的。

重装了还真的不报错了,但是编译的时候(图片第三步),又报collect2.exe: error: ld returned 1 exit status
*** [.pio\build\esp32dev\firmware.elf] Error 1。。。。。。。百度了说变量申明可能顺序有问题,大佬由办法吗?

ToxicSoulCount 关键字在main.cpp又加了一个申明,不然会报未定义标识符。
GxEPD_WHITE 变量报 "large integer implicitly truncated to unsigned type [-Woverflow]",建议值是否可以改为0xFF;
因为ld returned 的错误导致至今未能烧录成功,所以无法验证上述两条变动是否影响程序运行,只是先保证编译不报错。

ToxicSoulCount是定义在toxicsoul.h里面的,而在main.cpp里面其实有针对它的引用。所以我怀疑还是您环境的问题,因为我其实不太熟悉C++,不清楚编译器的机制,在这里也没法给您更好的解决方案。
而GxEPD_WHITE的问题,这个提示我也看到了,不过它是定义在GxEPD2里面的,我也就没有动他,倒也是不影响啥。

display.clearScreen(GxEPD_WHITE);

这个可以改成 display.fillScreen(GxEPD_WHITE); ,我参照GxEPD的例子来改的,这样是把全屏幕填充成白色,和作者做法异曲同工,且不会报错。

ToxicSoulCount未定义标识符

作者这样写也没问题,最好的办法是将 toxicsoul.h 里面的define给放在main.cpp的头部。

collect2.exe: error: ld returned 1 exit status

修改 platformio.ini

platform_packages = 
	framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git
	toolchain-xtensa32@~2.80400.0 

display.clearScreen(GxEPD_WHITE);

这个可以改成 display.fillScreen(GxEPD_WHITE); ,我参照GxEPD的例子来改的,这样是把全屏幕填充成白色,和作者做法异曲同工,且不会报错。

ToxicSoulCount未定义标识符

作者这样写也没问题,最好的办法是将 toxicsoul.h 里面的define给放在main.cpp的头部。

collect2.exe: error: ld returned 1 exit status

修改 platformio.ini

platform_packages = 
	framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git
	toolchain-xtensa32@~2.80400.0 

您好,关于第三个问题的解决。在使用您的方案之后仍然出现了问题:
c:/users/XXX/.platformio/packages/toolchain-xtensa32/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: final link failed: bad value collect2.exe: error: ld returned 1 exit status *** [.pio\build\esp32dev\firmware.elf] Error 1

display.clearScreen(GxEPD_WHITE);

这个可以改成 display.fillScreen(GxEPD_WHITE); ,我参照GxEPD的例子来改的,这样是把全屏幕填充成白色,和作者做法异曲同工,且不会报错。

ToxicSoulCount未定义标识符

作者这样写也没问题,最好的办法是将 toxicsoul.h 里面的define给放在main.cpp的头部。

collect2.exe: error: ld returned 1 exit status

修改 platformio.ini

platform_packages = 
	framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git
	toolchain-xtensa32@~2.80400.0 

您好,关于第三个问题的解决。在使用您的方案之后仍然出现了问题:
c:/users/XXX/.platformio/packages/toolchain-xtensa32/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: final link failed: bad value collect2.exe: error: ld returned 1 exit status *** [.pio\build\esp32dev\firmware.elf] Error 1

同,感觉是用了新版本的问题吧。想知道作者原来的环境版本

参考这个问题 :espressif/arduino-esp32#5436

[env:esp32dev]
platform = https://github.com/platformio/platform-espressif32.git#feature/arduino-upstream
board = esp32dev
framework = arduino
platform_packages = 
    platformio/framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git#2.0.0-rc1

display.clearScreen(GxEPD_WHITE);

这个可以改成 display.fillScreen(GxEPD_WHITE); ,我参照GxEPD的例子来改的,这样是把全屏幕填充成白色,和作者做法异曲同工,且不会报错。

ToxicSoulCount未定义标识符

作者这样写也没问题,最好的办法是将 toxicsoul.h 里面的define给放在main.cpp的头部。

collect2.exe: error: ld returned 1 exit status

修改 platformio.ini

platform_packages = 
	framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git
	toolchain-xtensa32@~2.80400.0 

您好,关于第三个问题的解决。在使用您的方案之后仍然出现了问题:
c:/users/XXX/.platformio/packages/toolchain-xtensa32/bin/../lib/gcc/xtensa-esp32-elf/8.4.0/../../../../xtensa-esp32-elf/bin/ld.exe: final link failed: bad value collect2.exe: error: ld returned 1 exit status *** [.pio\build\esp32dev\firmware.elf] Error 1

同,感觉是用了新版本的问题吧。想知道作者原来的环境版本

我原来的版本就是Git上的platformio.ini里面指定的版本。原来使用这个指定版本貌似是因为要访问https的网站,可以直接在client里面setInsecure()比较方便些,不用代码里面硬编码证书相关信息。

/Users/giotto/.platformio/packages/toolchain-xtensa32/bin/../lib/gcc/xtensa-esp32-elf/5.2.0/../../../../xtensa-esp32-elf/bin/ld: cannot find crt1-sim.o: No such file or directory
/Users/giotto/.platformio/packages/toolchain-xtensa32/bin/../lib/gcc/xtensa-esp32-elf/5.2.0/../../../../xtensa-esp32-elf/bin/ld: cannot find _vectors.o: No such file or directory
collect2: error: ld returned 1 exit status
*** [.pio/build/esp32dev/firmware.elf] Error 1

想问下大家这个编译报错应该怎么解决,我用的是macOS自带的gcc

2f674c94c068924ebfe2154cc23e2f6
这个是我没有配置好环境嘛?