RadioHead kütüphanesi bağlayıcı sorunu ve çözümü

Başlatan elektronikhobi, 29 Mayıs 2025, 19:22:05

elektronikhobi

Daha önce RF ASK işaretleri kullanan ufak uygulamalar yazmıştık.

RadioHead kütüphanesi kullanan basit bir uygulama yazdığımızda aşağıdaki bağlayıcı hatasını aldık.

Alıntı Yap/usr/share/arduino/hardware/tools/avr/bin/avr-gcc -Os -Wl,--gc-sections -mmcu=atmega328p  verici.o .lib/arduino.a -lm -o verici.elf
.lib/arduino.a(RH_ASK.cpp.o): In function `RH_ASK::~RH_ASK()':
RH_ASK.cpp:(.text._ZN6RH_ASKD0Ev[RH_ASK::~RH_ASK()]+0x4): undefined reference to `operator delete(void*, unsigned int)'
collect2: error: ld returned 1 exit status
make: *** [../arduino.mk:463: verici.elf] Error 1

Hatanın çözümü için uygulama dizininde aşağıdaki iki kütüğü oluşturmak yeterlidir.

new.cpp

#include <stdlib.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);
}
// C++14 introduces additional delete operators
#if __cplusplus >= 201402L
void operator delete(void * ptr, size_t)
{
    ::operator delete(ptr);
}
void operator delete[](void * ptr, size_t)
{
    ::operator delete(ptr);
}
#endif // end language is C++14 or greater

new.h

#ifndef NEW_H
#define NEW_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);
// C++14 introduces additional delete operators
#if __cplusplus >= 201402L
void operator delete(void * ptr, size_t);
void operator delete[](void * ptr, size_t);
#endif // end language is C++14 or greater
#endif
"Yirminci asrın akıllara hayret veren keşiflerinden birisi de hiç şüphesiz transistörlerdir."