libg cc
В некоторых случаях эта библиотека должна быть связана при компиляции с G CC. Поскольку G CC производит вызовы функций в этой библиотеке, если целевая архитектура не поддерживает указанную функцию c.
Например, если вы используете 64-битную арифметику c в своем ядре и вы хотите скомпилировать для i386 , затем G CC сделать вызов функции Speci c, которая находится в libgcc
:
uint64_t div64(uint64_t dividend, uint64_t divisor)
{
return (dividend / divisor);
}
Здесь вы получите undefined reference to __udivdi3
ошибка компоновщика при попытке связать ядро без libgcc
. С другой стороны, libgcc
также выполняет вызовы стандартных функций библиотеки C. Поэтому эти специфические c функции должны быть реализованы.
Вот еще одно хорошее ИМХО объяснение . Это называется «голое железо» для архитектуры ARM, но также и для x86.