gcc to link 手动失败:找不到我的运行时库的某些符号

gcc to link manually failed: cannot find some symbols of my runtime library

我在我的 64 位系统上试过 ubuntu:

首先我有一个简单的程序

$ cat test.c
int f(int x){
        int i=(x/42);
        return i;
}
int main(){
        return 0;
}

然后我手动指定它的链接方式:

$ gcc test.c -nostdlib /usr/lib/x86_64-linux-gnu/crt1.o /usr/lib/x86_64-linux-gnu/crti.o /usr/lib/x86_64-linux-gnu/crtn.o 

我遇到了一些错误:

    /usr/lib/x86_64-linux-gnu/crt1.o:In function ‘_start’中:
(.text+0x12):unresolved reference to ‘__libc_csu_fini’
/usr/lib/x86_64-linux-gnu/crt1.o:In function ‘_start’:
(.text+0x19): unresolved reference to ‘__libc_csu_init’
/usr/lib/x86_64-linux-gnu/crt1.o:In function ‘_start’:
(.text+0x25): unresolved reference to ‘__libc_start_main’
collect2: error: ld returned 1 exit status

我试图了解 gcc 如何处理所有必要的目标文件并尝试手动完成。如何解决?谢谢

How to fix it?

您缺少 libc 个符号,因此您需要 link libc:

gcc test.c -nostdlib /usr/lib/x86_64-linux-gnu/crt1.o /usr/lib/x86_64-linux-gnu/crti.o /usr/lib/x86_64-linux-gnu/crtn.o -lc

请记住,如果您真的想要link某事"manually",您将使用ld而不是gcc