Setting up C++ code on the ESP8266_RTOS_SDK
Posted: Wed Jan 24, 2024 5:29 pm
Hello ! I'm unable to make hello_world project work as .cpp file. The rename itself was enough for compiler to re-compile but with a error: startup.c:86: undefined reference to `app_main'. I've added to the main file extern to successfully compile the project:
But It was not enough. The initializeScreen(); function uses my crude driver for 1602 lcd that was working without problem when the file was simple C. It is included as component in components folder of the project. Previously when this was C project I didn't have any problems with compiling the code, but now since the C main file was made CPP one, the project fails with following errors:
I know that those functions are present and can be used, since before changing the .c file to .cpp there were no problems. The driver itself is written in C, not in C++.
How should I resolve this problem?
Code: Select all
#ifdef __cplusplus
extern "C"{
#endif
void app_main()
{
printf("Hello world!\n");
/* Print chip information */
esp_chip_info_t chip_info;
esp_chip_info(&chip_info);
printf("This is ESP8266 chip with %d CPU cores, WiFi, ",
chip_info.cores);
printf("silicon revision %d, ", chip_info.revision);
printf("%dMB %s flash\n", spi_flash_get_chip_size() / (1024 * 1024),
(chip_info.features & CHIP_FEATURE_EMB_FLASH) ? "embedded" : "external");
// Create a task for the LED blinking
// xTaskCreate(&blink_task, "blink_task", configMINIMAL_STACK_SIZE, NULL, 5, NULL);
initializeScreen();
for (int i = 10; i >= 0; i--) {
printf("Restarting in %d seconds...\n", i);
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
printf("Restarting now.\n");
fflush(stdout);
esp_restart();
}
#ifdef __cplusplus
}
#endif
Code: Select all
/Users/macbookpro/esp/xtensa-lx106-elf/bin/../lib/gcc/xtensa-lx106-elf/8.4.0/../../../../xtensa-lx106-elf/bin/ld: /Users/macbookpro/embedded_development/RTOS/ESP8266/lcd_test/build/main/libmain.a(hello_world_main.o):(.literal._Z16initializeScreenv+0x4): undefined reference to `initializeLCD(lcd_t*)'
/Users/macbookpro/esp/xtensa-lx106-elf/bin/../lib/gcc/xtensa-lx106-elf/8.4.0/../../../../xtensa-lx106-elf/bin/ld: /Users/macbookpro/embedded_development/RTOS/ESP8266/lcd_test/build/main/libmain.a(hello_world_main.o):(.literal._Z16initializeScreenv+0x8): undefined reference to `sendString(lcd_t*, char*)'
/Users/macbookpro/esp/xtensa-lx106-elf/bin/../lib/gcc/xtensa-lx106-elf/8.4.0/../../../../xtensa-lx106-elf/bin/ld: /Users/macbookpro/embedded_development/RTOS/ESP8266/lcd_test/build/main/libmain.a(hello_world_main.o): in function `initializeScreen()':
/Users/macbookpro/embedded_development/RTOS/ESP8266/lcd_test/main/hello_world_main.cpp:41: undefined reference to `initializeLCD(lcd_t*)'
/Users/macbookpro/esp/xtensa-lx106-elf/bin/../lib/gcc/xtensa-lx106-elf/8.4.0/../../../../xtensa-lx106-elf/bin/ld: /Users/macbookpro/embedded_development/RTOS/ESP8266/lcd_test/main/hello_world_main.cpp:43: undefined reference to `sendString(lcd_t*, char*)'
collect2: error: ld returned 1 exit status
How should I resolve this problem?