Компиляция C ++ под Linux без библиотеки времени выполнения

Недавно я начал исследовать способ использования библиотеки времени выполнения C ++ в сгенерированном коде.

В основном Я очень любопытный, -fno-builtin -fno-rtti -fno-exceptions -c main.cpp

Я получаю это предупреждение:

/ usr / bin / ld: warning: не удается найти символ входа _start; по умолчанию 00000000080480b8

Затем, когда я пытаюсь выполнить созданный двоичный файл, я получаю «Ошибка сегментации». Я попытался скомпилировать «main.cpp» и файл ASM.

[global _start]
[extern main]

_start:
  call main

Связывая объектные файлы вручную с помощью «ld», у меня нет предупреждения, но двоичный файл все еще вызывает «Ошибка сегментации».

Полагаю, я что-то упускаю. Вероятно, что-то, что нужно сделать до и после вызова «main», как, например, делает системная библиотека C в «__libc_start_main».

Кроме того, если у кого-то есть какие-либо рекомендации веб-сайтов, документации или книг по этой теме, которые я должен прочитать, я был бы очень признателен.

Спасибо,

Патрик

8
задан Patrick Samy 21 April 2011 в 00:39
поделиться