您好我制作了一个简单的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
例程
我在这里缺少什么?
答案 0 :(得分:4)
如果您与crt*
:gcc -v
,crt1.o
,crtend.o
相关联,则会遗漏crtn.o
内容。查看gcc
如何调用collect2
(gcc -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
有帮助。