wayland/ssd1306-oled-I2c example-scroll failed to compile (Solved)

I’m getting:
error: variable-sized object ‘cString’ may not be initialized
char cString[length(xString) + 1] = { 0 };
^
Compilation failed
Command C:\Users\marti\AppData\Local\Programs\XOD IDE\resources\arduino-cli.exe --config-file=C:\Users\marti\AppData\Local\Temp\arduino-cliJ9wh5l\.cli-config.yml compile --fqbn esp8266:esp8266:nodemcuv2:CpuFrequency=80 --verbose C:\Users\marti\AppData\Local\Temp\xod_temp_sketchbookQirxez\xod_1563004583491_sketch failed with code 1
The generated C++ code contains errors. It can be due to a bad node implementation or if your board is not compatible with XOD runtime code. The original compiler error message is above. Fix C++ errors to continue. If you believe it is a bug, report the problem to XOD developers.

How can I fix this?

I changed the code to:
char cString[length(xString)];
and this seemed to work ok.
NB I also removed the + 1 because it was adding an extra character to the end of the text displayed. When WRAP was set to True strange characters appeared at end, this was cured by setting WRAP to False.

Hi Martin,

Many thanks for the feedback. The original code works for the Arduino Uno and I don’t know why it can’t be compiled for the esp8266. I took the code to convert an XString to a C string from here:
https://forum.xod.io/t/convert-xstring-or-list-char-to-char/1495

Hopefully one of the more experienced members of the forum will be able to offer advice.

1 Like

I changed the code and it now seems to be working ok.
Here are the changes I made:
// length returns the number of characters and you need an extra one to keep the
// terminal NUL-character used in C string representation. Initialize to 0’s to
// ensure the last char is indeed NUL
// …following line gave compile error…
// char cString[length(xString) + 1] = { 0 };
// above line changed to below by mb
int N=length(xString) + 1;
char cString[N];
for(int i=0;i<N;i++)
cString[i]=0;
// move the data from XString to the plain C string
dump(xString, cString);

1 Like

Great stuff! I’ve published a new version of the library with your bug fix.

Many thanks,

Matt

1 Like

I have problem with compiling any of the examples. If I copy-paste code to arduino IDE it works. Here is what I get in XOD
+++++++++++++++++++++++++++++++++++++++++++++
Begin compiling code for the board Arduino Nano :package:

Using board ‘nano’ from platform in folder: C:\XOD_packages_\packages\arduino\hardware\avr\1.8.2
Using core ‘arduino’ from platform in folder: C:\XOD_packages_\packages\arduino\hardware\avr\1.8.2

Detecting libraries used…

“C:\XOD\packages\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino5/bin/avr-g++” -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR “-IC:\XOD\packages\packages\arduino\hardware\avr\1.8.2\cores\arduino” “-IC:\XOD\packages\packages\arduino\hardware\avr\1.8.2\variants\eightanaloginputs” “C:\Users\MiHec\AppData\Local\Temp\arduino-sketch-64101A1CFC2A8FE8801F6C2586DF4AFE\sketch\xod_1590692866948_sketch.ino.cpp” -o nul

Alternatives for SPI.h: [SPI@1.0]
ResolveLibrary(SPI.h)
-> candidates: [SPI@1.0]

“C:\XOD\packages\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino5/bin/avr-g++” -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR “-IC:\XOD\packages\packages\arduino\hardware\avr\1.8.2\cores\arduino” “-IC:\XOD\packages\packages\arduino\hardware\avr\1.8.2\variants\eightanaloginputs” “-IC:\XOD\packages\packages\arduino\hardware\avr\1.8.2\libraries\SPI\src” “C:\Users\MiHec\AppData\Local\Temp\arduino-sketch-64101A1CFC2A8FE8801F6C2586DF4AFE\sketch\xod_1590692866948_sketch.ino.cpp” -o nul

Alternatives for Wire.h: [Wire@1.0]
ResolveLibrary(Wire.h)
-> candidates: [Wire@1.0]

“C:\XOD\packages\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino5/bin/avr-g++” -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR “-IC:\XOD\packages\packages\arduino\hardware\avr\1.8.2\cores\arduino” “-IC:\XOD\packages\packages\arduino\hardware\avr\1.8.2\variants\eightanaloginputs” “-IC:\XOD\packages\packages\arduino\hardware\avr\1.8.2\libraries\SPI\src” “-IC:\XOD\packages\packages\arduino\hardware\avr\1.8.2\libraries\Wire\src” “C:\Users\MiHec\AppData\Local\Temp\arduino-sketch-64101A1CFC2A8FE8801F6C2586DF4AFE\sketch\xod_1590692866948_sketch.ino.cpp” -o nul

Alternatives for Adafruit_GFX.h: [Adafruit_GFX_Library@1.8.3]
ResolveLibrary(Adafruit_GFX.h)
-> candidates: [Adafruit_GFX_Library@1.8.3]

“C:\XOD\packages\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino5/bin/avr-g++” -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR “-IC:\XOD\packages\packages\arduino\hardware\avr\1.8.2\cores\arduino” “-IC:\XOD\packages\packages\arduino\hardware\avr\1.8.2\variants\eightanaloginputs” “-IC:\XOD\packages\packages\arduino\hardware\avr\1.8.2\libraries\SPI\src” “-IC:\XOD\packages\packages\arduino\hardware\avr\1.8.2\libraries\Wire\src” “-IC:\Users\MiHec\AppData\Local\Temp\xod_temp_sketchbookKMe9DB\libraries\Adafruit_GFX_Library” “C:\Users\MiHec\AppData\Local\Temp\arduino-sketch-64101A1CFC2A8FE8801F6C2586DF4AFE\sketch\xod_1590692866948_sketch.ino.cpp” -o nul

Alternatives for Adafruit_SSD1306.h: [Adafruit_SSD1306@2.2.1]
ResolveLibrary(Adafruit_SSD1306.h)
-> candidates: [Adafruit_SSD1306@2.2.1]

“C:\XOD\packages\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino5/bin/avr-g++” -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR “-IC:\XOD\packages\packages\arduino\hardware\avr\1.8.2\cores\arduino” “-IC:\XOD\packages\packages\arduino\hardware\avr\1.8.2\variants\eightanaloginputs” “-IC:\XOD\packages\packages\arduino\hardware\avr\1.8.2\libraries\SPI\src” “-IC:\XOD\packages\packages\arduino\hardware\avr\1.8.2\libraries\Wire\src” “-IC:\Users\MiHec\AppData\Local\Temp\xod_temp_sketchbookKMe9DB\libraries\Adafruit_GFX_Library” “-IC:\Users\MiHec\AppData\Local\Temp\xod_temp_sketchbookKMe9DB\libraries\Adafruit_SSD1306” “C:\Users\MiHec\AppData\Local\Temp\arduino-sketch-64101A1CFC2A8FE8801F6C2586DF4AFE\sketch\xod_1590692866948_sketch.ino.cpp” -o nul

“C:\XOD\packages\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino5/bin/avr-g++” -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR “-IC:\XOD\packages\packages\arduino\hardware\avr\1.8.2\cores\arduino” “-IC:\XOD\packages\packages\arduino\hardware\avr\1.8.2\variants\eightanaloginputs” “-IC:\XOD\packages\packages\arduino\hardware\avr\1.8.2\libraries\SPI\src” “-IC:\XOD\packages\packages\arduino\hardware\avr\1.8.2\libraries\Wire\src” “-IC:\Users\MiHec\AppData\Local\Temp\xod_temp_sketchbookKMe9DB\libraries\Adafruit_GFX_Library” “-IC:\Users\MiHec\AppData\Local\Temp\xod_temp_sketchbookKMe9DB\libraries\Adafruit_SSD1306” “C:\XOD\packages\packages\arduino\hardware\avr\1.8.2\libraries\SPI\src\SPI.cpp” -o nul

“C:\XOD\packages\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino5/bin/avr-g++” -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR “-IC:\XOD\packages\packages\arduino\hardware\avr\1.8.2\cores\arduino” “-IC:\XOD\packages\packages\arduino\hardware\avr\1.8.2\variants\eightanaloginputs” “-IC:\XOD\packages\packages\arduino\hardware\avr\1.8.2\libraries\SPI\src” “-IC:\XOD\packages\packages\arduino\hardware\avr\1.8.2\libraries\Wire\src” “-IC:\Users\MiHec\AppData\Local\Temp\xod_temp_sketchbookKMe9DB\libraries\Adafruit_GFX_Library” “-IC:\Users\MiHec\AppData\Local\Temp\xod_temp_sketchbookKMe9DB\libraries\Adafruit_SSD1306” “C:\XOD\packages\packages\arduino\hardware\avr\1.8.2\libraries\Wire\src\Wire.cpp” -o nul

“C:\XOD\packages\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino5/bin/avr-g++” -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR “-IC:\XOD\packages\packages\arduino\hardware\avr\1.8.2\cores\arduino” “-IC:\XOD\packages\packages\arduino\hardware\avr\1.8.2\variants\eightanaloginputs” “-IC:\XOD\packages\packages\arduino\hardware\avr\1.8.2\libraries\SPI\src” “-IC:\XOD\packages\packages\arduino\hardware\avr\1.8.2\libraries\Wire\src” “-IC:\Users\MiHec\AppData\Local\Temp\xod_temp_sketchbookKMe9DB\libraries\Adafruit_GFX_Library” “-IC:\Users\MiHec\AppData\Local\Temp\xod_temp_sketchbookKMe9DB\libraries\Adafruit_SSD1306” “C:\XOD\packages\packages\arduino\hardware\avr\1.8.2\libraries\Wire\src\utility\twi.c” -o nul

“C:\XOD\packages\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino5/bin/avr-g++” -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR “-IC:\XOD\packages\packages\arduino\hardware\avr\1.8.2\cores\arduino” “-IC:\XOD\packages\packages\arduino\hardware\avr\1.8.2\variants\eightanaloginputs” “-IC:\XOD\packages\packages\arduino\hardware\avr\1.8.2\libraries\SPI\src” “-IC:\XOD\packages\packages\arduino\hardware\avr\1.8.2\libraries\Wire\src” “-IC:\Users\MiHec\AppData\Local\Temp\xod_temp_sketchbookKMe9DB\libraries\Adafruit_GFX_Library” “-IC:\Users\MiHec\AppData\Local\Temp\xod_temp_sketchbookKMe9DB\libraries\Adafruit_SSD1306” “C:\Users\MiHec\AppData\Local\Temp\xod_temp_sketchbookKMe9DB\libraries\Adafruit_GFX_Library\Adafruit_GFX.cpp” -o nul

“C:\XOD\packages\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino5/bin/avr-g++” -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR “-IC:\XOD\packages\packages\arduino\hardware\avr\1.8.2\cores\arduino” “-IC:\XOD\packages\packages\arduino\hardware\avr\1.8.2\variants\eightanaloginputs” “-IC:\XOD\packages\packages\arduino\hardware\avr\1.8.2\libraries\SPI\src” “-IC:\XOD\packages\packages\arduino\hardware\avr\1.8.2\libraries\Wire\src” “-IC:\Users\MiHec\AppData\Local\Temp\xod_temp_sketchbookKMe9DB\libraries\Adafruit_GFX_Library” “-IC:\Users\MiHec\AppData\Local\Temp\xod_temp_sketchbookKMe9DB\libraries\Adafruit_SSD1306” “C:\Users\MiHec\AppData\Local\Temp\xod_temp_sketchbookKMe9DB\libraries\Adafruit_GFX_Library\Adafruit_MonoOLED.cpp” -o nul

In file included from C:\Users\MiHec\AppData\Local\Temp\xod_temp_sketchbookKMe9DB\libraries\Adafruit_GFX_Library\Adafruit_MonoOLED.cpp:20:0:
C:\Users\MiHec\AppData\Local\Temp\xod_temp_sketchbookKMe9DB\libraries\Adafruit_GFX_Library\Adafruit_MonoOLED.h:30:10: fatal error: Adafruit_I2CDevice.h: No such file or directory
#include <Adafruit_I2CDevice.h>
^~~~~~~~~~~~~~~~~~~~~~
compilation terminated.

Alternatives for Adafruit_I2CDevice.h: []
ResolveLibrary(Adafruit_I2CDevice.h)
-> candidates: []
Multiple libraries were found for “SPI.h”
Used: C:\XOD_packages_\packages\arduino\hardware\avr\1.8.2\libraries\SPI
Multiple libraries were found for “Wire.h”
Used: C:\XOD_packages_\packages\arduino\hardware\avr\1.8.2\libraries\Wire
Multiple libraries were found for “Adafruit_GFX.h”
Used: C:\Users\MiHec\AppData\Local\Temp\xod_temp_sketchbookKMe9DB\libraries\Adafruit_GFX_Library
Multiple libraries were found for “Adafruit_SSD1306.h”
Used: C:\Users\MiHec\AppData\Local\Temp\xod_temp_sketchbookKMe9DB\libraries\Adafruit_SSD1306

Using library SPI at version 1.0 in folder: C:\XOD_packages_\packages\arduino\hardware\avr\1.8.2\libraries\SPI
Using library Wire at version 1.0 in folder: C:\XOD_packages_\packages\arduino\hardware\avr\1.8.2\libraries\Wire
Using library Adafruit_GFX_Library at version 1.8.3 in folder: C:\Users\MiHec\AppData\Local\Temp\xod_temp_sketchbookKMe9DB\libraries\Adafruit_GFX_Library
Using library Adafruit_SSD1306 at version 2.2.1 in folder: C:\Users\MiHec\AppData\Local\Temp\xod_temp_sketchbookKMe9DB\libraries\Adafruit_SSD1306

Error: exit status 1
Compilation failed.
Compilation failed
Command Process exited with code 1
The generated C++ code contains errors. It can be due to a bad node implementation or if your board is not compatible with XOD runtime code. The original compiler error message is above. Fix C++ errors to continue. If you believe it is a bug, report the problem to XOD developers.

This is the important bit. You can search for this on your disk to see if it exists. If you are trying to run a simulation, it is not going to be able to support external hardware like would be using this include file. A simple test program shouldn’t need Wire.h or Adafruit includes, so we would need additional information about your program to help much more.

Adafruit_I2CDevice.h was missing. Thanx

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.