To pytanie z drugiej ręki z witryny programistycznej systemu operacyjnego, ale zaciekawiło mnie, ponieważ nigdzie nie mogłem znaleźć przyzwoitego wyjaśnienia.
Podczas kompilowania i linkowania wolnostojącego programu w C ++ przy użyciu gcc, czasami pojawia się taki błąd konsolidatora:
out/kernel.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
Jest to najwyraźniej spowodowane tym, że ten symbol jest zdefiniowany w libstdc ++, którego brakuje w wolnostojącym środowisku. Naprawienie problemu wymaga po prostu gdzieś zdefiniowania tego symbolu:
void *__gxx_personality_v0;
Co jest miłe, ale nie lubię rzeczy, które po prostu działają magicznie ... Więc pytanie brzmi, jaki jest cel tego symbolu?
-fno-exceptions
. DodałemCPPFLAGS += -fno-exceptions
do mojego pliku makefile i to rozwiązało błąd.