Dies ist eine gebrauchte Frage von einer OS-Entwicklungsseite, die mich jedoch neugierig machte, da ich nirgendwo eine anständige Erklärung finden konnte.
Beim Kompilieren und Verknüpfen eines freistehenden C ++ - Programms mit gcc tritt manchmal ein Linkerfehler wie der folgende auf:
out/kernel.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
Dies liegt anscheinend daran, dass dieses Symbol in libstdc ++ definiert ist, das in einer freistehenden Umgebung fehlt. Um das Problem zu beheben, muss dieses Symbol einfach irgendwo definiert werden:
void *__gxx_personality_v0;
Was schön ist, aber ich mag keine Dinge, die einfach magisch funktionieren ... Die Frage ist also, was ist der Zweck dieses Symbols?
-fno-exceptions
. IchCPPFLAGS += -fno-exceptions
habe meinem Makefile hinzugefügt , und das hat den Fehler behoben.