嗨,我做了一个简单的 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
例程。
我在这里想念什么?
如果您使用: , ,链接,您会丢失crt*
您将看到的内容。看看如何调用(它是可见的)并使用相同的选项。gcc -v
crt1.o
crtend.o
crtn.o
gcc
collect2
gcc -v
ld
main
函数不是可执行的入口点:标准库的一些初始化是在之前完成main
的(因为否则不可能或不合逻辑)。_start
默认情况下,真正的入口点crt1.o
总是链接到您的可执行文件中。
那是因为你没有main函数,你也可以试试
gcc -v hello.c -o hello
看看是否编译成功。
在我的系统(Angstrom Linux,gcc 4.3.3)上,由于我安装libgcc-s-dev
而不是libgcc-dev
. 系统上没有包含字符串的二进制文件_start
,我检查了一下。安装有libgcc-dev
帮助。