我正在尝试在Linux下编译一个C程序.然而,出于好奇,我正在尝试手动执行一些步骤:我使用:
现在我被连接部分困住了.
该程序是一个非常基本的"Hello world":
#include <stdio.h>
int main() {
printf("Hello\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我使用以下命令来生成汇编代码:
gcc hello.c -S -masm=intel
Run Code Online (Sandbox Code Playgroud)
我告诉gcc在编译后退出并使用Intel语法转储汇编代码.
然后我使用GNU汇编程序来生成目标文件:
as -o hello.o hello.s
Run Code Online (Sandbox Code Playgroud)
然后我尝试使用ld生成最终的可执行文件:
ld hello.o /usr/lib/libc.so /usr/lib/crt1.o -o hello
Run Code Online (Sandbox Code Playgroud)
但我不断收到以下错误消息:
/usr/lib/crt1.o: In function `_start':
(.text+0xc): undefined reference to `__libc_csu_fini'
/usr/lib/crt1.o: In function `_start':
(.text+0x11): undefined reference to `__libc_csu_init'
Run Code Online (Sandbox Code Playgroud)
符号__libc_csu_fini/init似乎是glibc的一部分,但我无法在任何地方找到它们!我尝试/usr/lib/libc.a使用相同的结果静态链接libc(反对).
问题是什么?