임베디드 장치 용 C++ 프로그램을 작성하고 libstdC++, 예외 및 동적 메모리 할당없이 컴파일하려고합니다.삭제 연산자없이 C++ 컴파일
예제 프로그램 :
#include <stdio.h>
class A
{
public:
virtual ~A() {}
virtual void Foo() = 0;
};
class B : public A
{
public:
virtual ~B() {}
virtual void Foo() override{}
};
int main()
{
B b;
return 0;
}
즉시 나는 다음과 같은 오류 다 퉜다.
__cxa_pure_virtual
가 필요한 이유
$ gcc src.cpp -static -fno-rtti -fno-exceptions -std=c++11
/tmp/ccd0Wydq.o: In function
A::~A()': src.cpp:(.text._ZN1AD2Ev[_ZN1AD5Ev]+0x29): undefined reference to
operator delete(void*)' /tmp/ccd0Wydq.o: In functionA::~A()': src.cpp:(.text._ZN1AD0Ev[_ZN1AD5Ev]+0x20): undefined reference to
operator delete(void*)' /tmp/ccd0Wydq.o: In functionB::~B()': src.cpp:(.text._ZN1BD2Ev[_ZN1BD5Ev]+0x35): undefined reference to
operator delete(void*)' /tmp/ccd0Wydq.o: In functionB::~B()': src.cpp:(.text._ZN1BD0Ev[_ZN1BD5Ev]+0x20): undefined reference to
operator delete(void*)' /tmp/ccd0Wydq.o:(.rodata._ZTV1A[_ZTV1A]+0x20): undefined reference to `__cxa_pure_virtual' collect2: error: ld returned 1 exit status Makefile:2: recipe for target 'all' failed make: *** [all] Error 1
은 이해하지만, 나는 delete
구현이 필요한 이유 내 인생에 얻을 수 없었기 때문.
코드에서 new
또는 delete
연산을 수행하지 않습니다. 왜 필요합니까?
링커의 요구 사항을 충족시키기 위해 두 가지 기능을 모두 구현할 경우 어느 쪽도 호출되지 않은 것으로 보입니다 (예상대로).
이러한 기능을 구현하지 않는 방법이 있습니까?
아무 것도하지 않아도 구현하는 데 문제가 있습니까? –
나는 큰 assert (1 == 0)로 그들을 스텁 (stub)하여 그들이 호출되지 않았 음을 확신 할 것이다. –
추한 솔루션입니다. 유일한 해결책이라면 해보 겠지만, 왜 그런지 알고 싶습니다. –