原创 ld之解『原』

2007-12-27 19:06 2402 10 10 分类: MCU/ 嵌入式
    找工作前学习网上流行的《S3C2410完全开发流程》时,碰到这么一个问题,就是Makfile中有一个出现了ld,当时我不知道为什么要这句,试着把ld那句注释掉,结果死活不能make通过;当时查了N多资料,就是没找到。今天下午上自习时,仔细看了下昨天借的Richard Blum著《Assembly Language》『中文版』;呵呵,仔细看了两个小时,没白看,无意中把前面的问题给解决了,呵呵。
    因为汇编程序被转化成可执行文件时,连接器必须知道指令码中的起始地址。为了解决这个问题,GUN汇编器声明一个默认标签,或者说是标志符,它就是_start。如果连接器找不到_start,就会生成错误信息;错误信息我就不贴出来了。当然也可以使用_start以为的标签作为起始地点;但是必须通过-e来说明。
    比如有一个汇编文件cpuid.s;它转化成可执行的文件cpuid。是通过:
    as -o cpuid.o cpuid.s   #起始标签为_start
    ld -o cpuid cpuid.o
或:
    as -o cpuid.o cpuid.s   #起始标签为_start1

    ld -e _start1 -o cpuid cpuid.o
    我们知道GCC它不仅能编译汇编语言,还能编译高级语言如C语言。那么GCC它又是以什么标签来作为起始地址?我们知道C语言中至少有main函数;所以main便是gcc要找的标签。如果要用gcc来编译上面的cpuid.s,必须把源文件中的
    .globl _start
    _start:  
改为.globl main
    main:
    不知道大家明白了不。

文章评论0条评论)

登录后参与讨论
我要评论
0
10
关闭 站长推荐上一条 /2 下一条