我在我的64个小点上试过这个
首先,我有一个简单的程序
$ 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如何处理所有必要的对象文件,并尝试手动处理。怎么修呢?谢谢。
发布于 2017-02-11 12:36:14
怎么修呢?
您缺少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
进行链接。
https://stackoverflow.com/questions/42175652
复制相似问题