我试图在C
中编译并运行下面的程序,但没有main()
函数。我使用以下命令编译了我的程序。编译并运行没有main()的程序在C中为
gcc -nostartfiles nomain.c
而编译器在警告
/usr/bin/ld: warning: cannot find entry symbol _start; defaulting to 0000000000400340
行,没问题。然后,我已经运行可执行文件(a.out),两个printf
语句打印成功,然后得到段错误。
所以,我的问题是,成功执行打印语句后为什么分段错误?
我的代码:
#include <stdio.h>
void nomain()
{
printf("Hello World...\n");
printf("Successfully run without main...\n");
}
输出:
Hello World...
Successfully run without main...
Segmentation fault (core dumped)
注:
这里,-nostartfiles
GCC标志链接
我很惊讶这项作品。坦率地说,我认为链接器的这种处理方式是错误的(或者至少是一件坏事):没有入口点,所以链接器只是让它从任何函数都很方便而产生幻觉。布莱什。 – imallett
@imallett,至少该链接器足以引起人们对它的警告,并解释它正在采取的回退行动!不过,你说得对,这可能更好,因为错误而不仅仅是警告。 –
你为什么不用main? –