gcc手动链接失败:无法找到我的运行时库的一些符号

时间:2017-02-11 12:06:17

标签: object gcc linker resolve manual

我在我的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如何处理所有必要的目标文件,并尝试手动完成。怎么解决?感谢。

1 个答案:

答案 0 :(得分:1)

  

如何解决?

您缺少libc符号,因此需要关联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

请记住,如果确实想要“手动”链接某些内容,您将使用ld,而不是gcc