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