首页 > 代码库 > 关于链接脚本中程序入口的一些问题

关于链接脚本中程序入口的一些问题

http://www.jb51.net/article/62360.htm
    在编写普通的c语言程序时,我们都会先写一个main函数,并认为main函数是所有程序的入口函数,其实main函数只是我们所编写的程序的入口函数,真正可执行文件的入口点并不是main函数,在执行main函数之前还有许多的初始化工作需要做,这些在main函数之前的工作是由标准 C 库完成的,然后再由标准  C 库调用main函数。
    真正可执行文件的入口点可以通过查看链接脚本(在使用ld命令时加上-verbose参数)可以看出,真正的入口点是_start函数(或者是一个标号)。由上面的内容可以知道_start函数是 C 库中的内容。所以如果在编译时不链接标准库,会出现 找不到_start 的错误。
======================================================
    在学习arm裸机的时候,肯定是用不到标准C库的,而默认程序的入口点就是_start(也可以通过链接脚本来改变入口,但没必要),那么_start标号的地址就会被设置成链接脚本中的代码段的链接地址起始处。我们所写的裸机程序中一定要有 _start 标号或者 _start 函数。
    比如.text段的链接起始地址被设置成了 0x2000_0000,那么_start 标号处的地址在链接后将会被设置成 0x2000_0000。然后代码再被拷贝到 iRAM 或者 SDRAM 中运行。

关于链接脚本中程序入口的一些问题