gcc对main函数的作用:
int main(int argc, char **argv)
{
__gccmain();
自己的代码;
return 0;
}
1.main() 函数与__gccmain()
mips-elf-gcc -c main.c 不连接库,当应用程序中包含了 main()函数,将会引起对 C 运行时库的初始化。该初始化是通过函数__gccmain()实现的,即在 main()函数入口处,编译器会首先调用__gccmain()函数,然后才是执行编写的代码。__gccmain()函数在 gcc 的标准库里面实现。当应用程序中没有包含 main()函数,将不会引起对 C 运行时库的初始化。这时,C 运行时库的很多功能在应用程序中是不能使用的。
在基础实验的课程里面,我们没有涉及到函数库的内容,因此,我们不打算在这里加入函数库的使用。因此,如果我们使用 main 函数作为应用程序的主函数,可以在源代码中加入一个空的__gccmain()函数(用 C 语言或者汇编语言均可)。2. mips-elf-ld 时 main函数和crt1.o连接,同时连接库函数找__gccmain(),整个程序的入口点是crt1.o
中提供的_start
,它首先做一些初始化工作(以下称为启动例程,Startup Routine),然后调用C代码中提供的main
函数。所以,以前我们说main
函数是程序的入口点其实不准确,_start
才是真正的入口点,而main
函数是被_start
调用的。
总上两点 main函数不可以在pmon的开始阶段