嗨,我做了一个简单的 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 -vcrt1.ocrtend.ocrtn.ogcccollect2gcc -vld
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帮助。