相关疑难解决方法(0)

直接将C程序与ld链接失败,未定义引用`__libc_csu_fini`

我正在尝试在Linux下编译一个C程序.然而,出于好奇,我正在尝试手动执行一些步骤:我使用:

  • gcc前端生成汇编代码
  • 然后运行GNU汇编程序以获取目标文件
  • 然后将其与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(反对).

问题是什么?

c linker gcc glibc ld

15
推荐指数
3
解决办法
2万
查看次数

标签 统计

c ×1

gcc ×1

glibc ×1

ld ×1

linker ×1