Я пытаюсь скомпилировать программу на C под Linux. Однако из любопытства я пытаюсь выполнить некоторые шаги вручную: я использую:
Теперь я застрял на связующей части.
Программа представляет собой очень простой "Hello world":
#include <stdio.h>
int main() {
printf("Hello\n");
return 0;
}
Я использую следующую команду для создания кода сборки :
gcc hello.c -S -masm=intel
Я говорю gcc завершить работу после компиляции и сбросить ассемблерный код с синтаксисом Intel.
Затем я использую ассемблер GNU для создания объектного файла:
as -o hello.o hello.s
Затем я пытаюсь использовать ld для создания окончательного исполняемого файла :
ld hello.o /usr/lib/libc.so /usr/lib/crt1.o -o hello
Но я все время получаю следующее сообщение об ошибке:
/usr/lib/crt1.o: In function `_start':
(.text+0xc): undefined reference to `__libc_csu_fini'
/usr/lib/crt1.o: In function `_start':
(.text+0x11): undefined reference to `__libc_csu_init'
Символы __ libc_csu_fini / init
кажутся частью glibc, но я нигде их не могу найти! Я попытался установить статическую линковку с libc (с /usr/lib/libc.a
) с тем же результатом.
В чем может быть проблема?