Unbenutzte Funktionen werden nicht aus binär entferntC++

Programme in C++. Entwicklerforum
Anonymous
 Unbenutzte Funktionen werden nicht aus binär entfernt

Post by Anonymous »

Ich verwende C ++ mit ARM-None-Aebi-GCC-Compiler, um Software für eine MCU zu schreiben. Das Problem ist, wenn eine der Funktionen des Wrappers verwendet wird, alle Funktionen (auch nicht genannt werden) in der kompilierten Binärdatei enthalten, einschließlich des riesigen Bibliothekscode, den sie verwenden, der viel unnötiger Raum benötigt.

Code: Select all

#include 
#include "ClassA.h"

class Wrapper {
public:
static float square(float x);
static float reciprocal(float x);

static void setImplementation(ClassA *impl);

private:
static ClassA *classA;
};
< /code>
wrapper.cpp:
#include "Wrapper.h"

ClassA *Wrapper::classA = nullptr;

float Wrapper::square(float x) { return classA->square(x); }
float Wrapper::reciprocal(float x) { return classA->reciprocal(x); }
void Wrapper::setImplementation(ClassA *impl) { classA = impl; }
< /code>
classa.h:
#include 

class ClassA {
public:
virtual ~ClassA() = default;
virtual float square(float x);
virtual float reciprocal(float x);
};
< /code>
classa.cpp:
#include "ClassA.h"

float ClassA::square(float x) {
float y = x * x;
return y;
}

float ClassA::reciprocal(float x) {
float y = 1.0f / x;
return y;
}
< /code>
Wenn ich dann eine der Funktionen über den Wrapper aufruft < /p>
ClassA classA;
Wrapper::setImplementation(&classA);
static volatile float value = 0.6f;
static volatile float test = Wrapper::reciprocal(value);
< /code>
Es scheint, dass immer alle Funktionen von Classa (in diesem Fall zwei) in binär sind, selbst sie werden nicht genannt. Im Allgemeinen entfernen Sie die nicht verwendete Funktion aus den binären Werken, nur wenn dieses Konstrukt verwendet wird, nicht. Beispiel ist: < /p>
arm-none-eabi-g++ -mcpu=cortex-m0plus -march=armv6-m -mthumb -mlittle-endian -mfloat-abi=soft \
-ggdb -Os -flto=auto -ffunction-sections -fdata-sections -fsingle-precision-constant \
-fno-rtti -fno-exceptions -Wno-register \
-Wno-pedantic -Wno-unused-parameter -Wall -Wextra -Wpedantic -Wdouble-promotion \
-DARM_MATH_CM0 -DCBOR_NO_HALF_FLOAT_TYPE -DDEBUG \
-nostartfiles --specs=nano.specs --specs=nosys.specs -Wl,--gc-sections,-no-wchar-size-warning \
-Wl,-e,main,-Map=output.map -T/workspaces/mspm0g1519.lds \
-I/workspaces/src/sandbox \
-o output.elf \
/workspaces/src/main.cpp \
/workspaces/src/sandbox/ClassA.cpp \
/workspaces/src/sandbox/Wrapper.cpp

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post