Я недавно начал исследовать способ использования библиотеки времени выполнения C ++ в сгенерированном коде.
В основном мне очень любопытно, но я также хочу оценить объем работы, необходимый для разработки минимально необходимого материала для запуска ядра на C ++.
Итак, я начал реализовывать свою собственную библиотеку времени выполнения, но у меня небольшая проблема.
int main(int argc, char **argv)
{
return 0;
}
Компилируем это с помощью следующей команды:
$ g ++ -ffreedтинг -nostdlib
-fno-builtin -fno-rtti -fno-exceptions -c main.cpp
Я получаю это предупреждение:
/ usr / bin / ld: предупреждение: не удается найти символ ввода _start; по умолчанию 00000000080480b8
Затем, когда я пытаюсь выполнить созданный двоичный файл, я получаю «Ошибка сегментации».
Я попытался скомпилировать "main.cpp" и файл ASM.
[global _start]
[extern main]
_start:
call main
Связывая объектные файлы вручную с помощью "ld", у меня нет предупреждения, но двоичный файл все еще вызывает "Ошибка сегментации".
Полагаю, я что-то упустил. Возможно, что-то должно быть сделано до и после вызова «main», как это делает системная библиотека C в «__libc_start_main», например.
Кроме того, если у кого-нибудь есть какие-либо рекомендации относительно веб-сайтов, документации или книг по этой теме, которые я должен прочитать, я был бы очень признателен.
Спасибо
Patrick