Это вопрос из вторых рук с сайта разработки ОС, но мне было любопытно, потому что я не мог найти достойного объяснения нигде.Что такое __gxx_personality_v0 для?
При компиляции и компоновки свободно стоящей программы на C++ с использованием GCC, иногда ошибка линкера, как это происходит:
out/kernel.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
Это, по-видимому, потому что этот символ определен в libstdC++, который отсутствует в FREE- постоянная окружающая среда. Решение проблемы просто требует определения этого символа где:
void *__gxx_personality_v0;
Что приятно, но мне не нравится то, что просто волшебно работать ... Так что вопрос в том, какова цель этого символа?
Не обязательно прыгать на 0; глобальный неинициализирован, поэтому на самом деле это может быть любая ценность. – strager 2008-11-30 17:53:15
strager, globals инициализируются нулем, если программист не инициализирует их – 2008-11-30 18:25:25
@litb: это верно только в том случае, если ядро реализует обнуление секции bss: -P. Но да, они должны быть инициализированы ради сани. – 2009-03-27 15:29:54