ld:_start未找到默认值

时间:2013-01-28 09:27:52

标签: c gcc ld

您好我制作了一个简单的hello world C程序,我正在编译它:

gcc -c hello.c
ld hello.o -lc -o out

我从ld:ld : _start not found defaulting to ....

收到警告

我执行了objdump -D hello.o,但在输出中找不到_start例程 我在这里缺少什么?

3 个答案:

答案 0 :(得分:4)

如果您与crt*gcc -vcrt1.ocrtend.o相关联,则会遗漏crtn.o内容。查看gcc如何调用collect2gcc -v可见)并使用ld的相同选项。

main函数不是可执行入口点:标准库的某些初始化是在main之前完成的(因为它要么不可能,要么不合逻辑)。真正的入口点,默认为_start,位于crt1.o,始终链接到您的可执行文件。

答案 1 :(得分:0)

这是因为您没有主要功能,也可以尝试

gcc -v hello.c -o hello

查看它是否成功编译。

答案 2 :(得分:0)

在我的系统(Angstrom Linux,gcc 4.3.3)上,由于我安装了libgcc-s-dev而不是libgcc-dev,所以发生了这种情况。系统上没有二进制文件包含_start字符串,我检查了一下。安装libgcc-dev有帮助。