Самый простой способ — скомпилировать код 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