Пишу на С++ программку для AtMega328p. При компиляции получается ошибка - undefined reference to operator new[](unsigned int)
ругается на строчку uint8_t* arr = new uint8_t[10];
Использую gcc, g++ и всё остальное из Atmel Studio Настройки для стандарты язык с11 и с++14 соответственно.
Что делать? Как лечить?
Сообщения среды:
====================[ Build | all | Debug ]=====================================
"D:\Programs\CLion 2019.1.3\bin\cmake\win\bin\cmake.exe" --build D:\Projects\Tests\ModBusRTU\cmake-build-debug --target all -- -j 4
Scanning dependencies of target ControllerTest-atmega328p.elf
[ 10%] Building CXX object CMakeFiles/ControllerTest-atmega328p.elf.dir/src/ModBusRTU/MBBuffer.cpp.obj
[ 20%] Building CXX object CMakeFiles/ControllerTest-atmega328p.elf.dir/src/ModBusRTU/MBMemoryStorage.cpp.obj
[ 30%] Building CXX object CMakeFiles/ControllerTest-atmega328p.elf.dir/src/ModBusRTU/MbFlags.cpp.obj
[ 40%] Building CXX object CMakeFiles/ControllerTest-atmega328p.elf.dir/src/ModBusRTU/ModbusMemoryBlock.cpp.obj
[ 50%] Building CXX object CMakeFiles/ControllerTest-atmega328p.elf.dir/src/ModBusRTU/ModbusRTU.cpp.obj
[ 60%] Building CXX object CMakeFiles/ControllerTest-atmega328p.elf.dir/src/main.cpp.obj
[ 70%] Linking CXX executable ControllerTest-atmega328p.elf
CMakeFiles/ControllerTest-atmega328p.elf.dir/src/ModBusRTU/MBBuffer.cpp.obj: In function `ModBus::MBBuffer::MBBuffer(int)':
D:\Projects\Tests\ModBusRTU\src\ModBusRTU/MBBuffer.cpp:9: undefined reference to `operator new[](unsigned int)'
CMakeFiles/ControllerTest-atmega328p.elf.dir/src/ModBusRTU/ModbusRTU.cpp.obj: In function `ModBus::ModbusRTU::Init(unsigned char, ModBus::BaudRate, unsigned char, ModBus::MbFlags)':
D:\Projects\Tests\ModBusRTU\src\ModBusRTU/ModbusRTU.cpp:18: undefined reference to `operator new(unsigned int)'
CMakeFiles/ControllerTest-atmega328p.elf.dir/src/main.cpp.obj: In function `setup()':
D:\Projects\Tests\ModBusRTU\src/main.cpp:9: undefined reference to `operator new(unsigned int)'
collect2.exe: error: ld returned 1 exit status
mingw32-make.exe[2]: *** [ControllerTest-atmega328p.elf] Error 1
CMakeFiles\ControllerTest-atmega328p.elf.dir\build.make:158: recipe for target 'ControllerTest-atmega328p.elf' failed
mingw32-make.exe[1]: *** [CMakeFiles/ControllerTest-atmega328p.elf.dir/all] Error 2
CMakeFiles\Makefile2:108: recipe for target 'CMakeFiles/ControllerTest-atmega328p.elf.dir/all' failed
mingw32-make.exe: *** [all] Error 2
Makefile:82: recipe for target 'all' failed
В с++ для микроконтроллеров AVR не определены операторы new
, new[]
, delete
и delete[]
из этого следует, что их нужно определить самому. Здесь приведён пример как это сделать проще всего. Не уверен, что моя реализация delete[]
корректна.
Для себя создал отдельный Global.h и Global.cpp со следующим содержимым:
Global.h
#ifndef CONTROLLERTEST_GLOBAL_H
#define CONTROLLERTEST_GLOBAL_H
#include <stdint.h>
#include <stddef.h>
#include <stdlib.h>
void* operator new(size_t size);
void* operator new[](size_t size);
void operator delete(void* ptr);
void operator delete[](void* ptr);
__extension__ typedef int __guard __attribute__((mode (__DI__)));
extern "C" int __cxa_guard_acquire(__guard*);
extern "C" void __cxa_guard_release(__guard*);
extern "C" void __cxa_guard_abort(__guard*);
extern "C" void __cxa_pure_virtual(void);
#endif //CONTROLLERTEST_GLOBAL_H
Global.cpp
#include "Global.h"
void* operator new(size_t size) { return malloc(size); }
void* operator new[](size_t size) { return malloc(size); }
void operator delete(void* ptr) { free(ptr); }
void operator delete[](void* ptr) { free(ptr); }
int __cxa_guard_acquire(__guard* g) { return !*(char*) (g); }
void __cxa_guard_release(__guard* g) { *(char*) g = 1; }
void __cxa_guard_abort(__guard*) {}
void __cxa_pure_virtual(void) {}
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Меня интересует как именно устроин рендер с помощью gpu? На основе ui, с помощью ратерезатора, генерируются текстуры, которые затем отправляются...
Можно ли вообще написать код на c++ а потом скомпилировать вapk
Написал код под AVR (atmega8p), скомпилировал в elf и hex файлыПри нажатии кнопки debug выдаёт сообщение: