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
我在我的 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