1

嗨,我做了一个简单的 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例程。
我在这里想念什么?

4

3 回答 3

4

如果您使用: , ,链接,您会丢失crt*您将看到的内容。看看如何调用(它是可见的)并使用相同的选项。gcc -vcrt1.ocrtend.ocrtn.ogcccollect2gcc -vld

main函数不是可执行的入口点:标准库的一些初始化是在之前完成main的(因为否则不可能或不合逻辑)。_start默认情况下,真正的入口点crt1.o总是链接到您的可执行文件中。

于 2013-01-28T09:31:16.707 回答
0

那是因为你没有main函数,你也可以试试

gcc -v hello.c -o hello

看看是否编译成功。

于 2013-01-28T09:31:05.430 回答
0

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

于 2014-07-16T16:12:33.490 回答