Самый простой способ — скомпилировать код C в объектные файлы (gcc -c
, чтобы получить несколько *.o
файлов), а затем напрямую связать их с компоновщиком (ld
). Вам придется связать ваши объектные файлы с несколькими дополнительными объектными файлами, такими как /usr/lib/crt1.o
, чтобы получить работающий исполняемый файл (между точкой входа, видимой ядром, и функцией main()
есть немного работы) . Чтобы узнать, с чем связываться, попробуйте связать glibc, используя gcc -v
: это должно показать вам, что обычно входит в исполняемый файл.
Вы обнаружите, что gcc генерирует код, который может иметь некоторые зависимости от нескольких скрытых функций. Большинство из них находятся в libgcc.a
. Также могут быть скрытые вызовы memcpy()
, memmove()
, memset()
и memcmp()
, которые находятся в libc, поэтому вам, возможно, придется предоставить свои собственные версии (что несложно, по крайней мере, если вы не слишком требовательны к производительности).
Временами все может проясняться, если вы посмотрите на созданную сборку (используйте флаг -S
).
person
Thomas Pornin
schedule
30.03.2010
-nostdlib
должен это сделать, какую версию платформы/компилятора вы используете? - person Carl Norum   schedule 31.03.2010