Библиотека AVR-STL
У меня есть проект, в котором мне нужно использовать вектор, я попытался скомпилировать несколько библиотек, но мне не повезло. Тот, который оказался ближе всего, - это AVR-STL Энди Брауна. Я продолжаю получать сообщение об ошибке:
C:\Eclipse\eclipse\arduinoPlugin\packages\arduino\hardware\avr\1.6.10\libraries\AVR-STL/pnew.cpp:12:7: error: redefinition of 'void* operator new(size_t, void*)'
Я уверен, что это простое решение, я просто понятия не имею, как это сделать. Если эта библиотека больше не жизнеспособна, может ли кто-нибудь порекомендовать другую?
Вот код, который я пытаюсь скомпилировать
#include "Arduino.h"
#include "iterator"
#include "vector"
#include "pnew.cpp"
std::vector<int> test;
void setup(void) {
Serial.begin(57600);
}
void loop(void) {
test.push_back(1);
Serial.println("Pushed");
}
И полный вывод:
14:57:27 **** Incremental Build of configuration Release for project MegaTesting ****
"C:\\Eclipse\\eclipse\\arduinoPlugin\\tools\\make\\make" all
'Building file: ../.ino.cpp'
'Starting C++ compile'
"C:\Eclipse\eclipse\arduinoPlugin\tools\arduino\avr-gcc\4.8.1-arduino5/bin/avr-g++" -c -g -Os -std=gnu++11 -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega2560 -DF_CPU=16000000L -DARDUINO=10606 -DARDUINO_AVR_MEGA2560 -DARDUINO_ARCH_AVR -I"C:\Eclipse\eclipse\arduinoPlugin\packages\arduino\hardware\avr\1.6.10\cores\arduino" -I"C:\Eclipse\eclipse\arduinoPlugin\packages\arduino\hardware\avr\1.6.10\variants\mega" -I"C:\Eclipse\eclipse\arduinoPlugin\packages\arduino\hardware\avr\1.6.10\libraries\AVR-STL" -I"C:\Eclipse\eclipse\arduinoPlugin\packages\arduino\hardware\avr\1.6.10\libraries\AVR-STL\utility" -MMD -MP -MF".ino.cpp.d" -MT".ino.cpp.o" -D__IN_ECLIPSE__=1 -x c++ "../.ino.cpp" -o ".ino.cpp.o" -Wall
cc1plus.exe: warning: C:\Eclipse\eclipse\arduinoPlugin\packages\arduino\hardware\avr\1.6.10\libraries\AVR-STL\utility: not a directory [enabled by default]
In file included from C:\Eclipse\eclipse\arduinoPlugin\packages\arduino\hardware\avr\1.6.10\libraries\AVR-STL/stl_iterator_base.h:38:0,
from C:\Eclipse\eclipse\arduinoPlugin\packages\arduino\hardware\avr\1.6.10\libraries\AVR-STL/iterator:40,
from ../.ino.cpp:8:
C:\Eclipse\eclipse\arduinoPlugin\packages\arduino\hardware\avr\1.6.10\libraries\AVR-STL/concept_checks.h: In static member function 'static void _TrivialIterator_concept_specification<_TrivialIterator>::_TrivialIterator_requirement_violation(_TrivialIterator)':
C:\Eclipse\eclipse\arduinoPlugin\packages\arduino\hardware\avr\1.6.10\libraries\AVR-STL/concept_checks.h:572:16: warning: typedef '__T' locally defined but not used [-Wunused-local-typedefs]
value_type __T;
^
C:\Eclipse\eclipse\arduinoPlugin\packages\arduino\hardware\avr\1.6.10\libraries\AVR-STL/concept_checks.h: In static member function 'static void _Allocator_concept_specification<_Alloc>::_Allocator_requirement_violation(_Alloc)':
C:\Eclipse\eclipse\arduinoPlugin\packages\arduino\hardware\avr\1.6.10\libraries\AVR-STL/concept_checks.h:799:39: warning: typedef '_Tp' locally defined but not used [-Wunused-local-typedefs]
typedef typename _Alloc::value_type _Tp;
^
In file included from ../MegaTesting.ino:3:0,
from ../.ino.cpp:14:
C:\Eclipse\eclipse\arduinoPlugin\packages\arduino\hardware\avr\1.6.10\libraries\AVR-STL/pnew.cpp: In function 'void* operator new(size_t, void*)':
C:\Eclipse\eclipse\arduinoPlugin\packages\arduino\hardware\avr\1.6.10\libraries\AVR-STL/pnew.cpp:12:7: error: redefinition of 'void* operator new(size_t, void*)'
void* operator new(size_t size_,void *ptr_){
^
In file included from ../.ino.cpp:10:0:
C:\Eclipse\eclipse\arduinoPlugin\packages\arduino\hardware\avr\1.6.10\libraries\AVR-STL/pnew.cpp:12:7: error: 'void* operator new(size_t, void*)' previously defined here
void* operator new(size_t size_,void *ptr_){
^
subdir.mk:24: recipe for target '.ino.cpp.o' failed
make: *** [.ino.cpp.o] Error 1
14:57:28 Build Finished (took 600ms)
@Andy Braham, 👍0
Обсуждение1 ответ
Похоже, что новое
переопределено. Я вижу, что вы включаете файл cpp, содержащий реализацию - это довольно неудачный дизайн, но именно так это делается.
В любом случае, похоже, что этот файл уже компилируется в другом месте. Вы пытались удалить это приложение? Что произойдет, если вы его удалите?
Помимо этой проблемы, вы должны знать, что динамическое управление памятью в такой небольшой системе сопряжено с риском фрагментации памяти, что в конечном итоге приводит к неудачному распределению.
В том-то и дело, что я пытался исключить pnew.cpp и хотите верьте, хотите нет, я получаю неопределенное сообщение, даже если я включаю Arduino.h перед любой из этой библиотеки., @Andy Braham
Можете ли вы выделить что-либо с помощью "нового"? Он должен быть доступен с 1.0.5 или что-то в этом роде. Попробуйте int *i = новый int[5];
., @IOB Toolkit Team
Вот что странно в этом, у меня действительно есть "новая" функциональность во время выполнения, вот почему я думаю, что это связано либо с включением, либо с заголовком, потому что new доступен без использования этой библиотеки, @Andy Braham
- Как разделить входящую строку?
- Как использовать SPI на Arduino?
- Как сбросить или отформатировать Arduino?
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
- Arduino Due vs Mega 2560
- Как получить уникальный идентификатор для всех плат Arduino?
- Почему я получаю avrdude: stk500v2_ReceiveMessage(): timeout error when uploading to Arduino Mega?
- Тайм-аут связи Arduino Mega с ошибкой программатора
У меня есть "метод Энди Браунса" стандартной работы библиотеки. Но я верю, что у меня не было такой же ошибки, как у вас. Переопределение означало бы, что что-то уже определено, я думаю, вы можете в какой-то момент отказаться от его включения, поскольку оно уже определено., @Paul