编译工具

来源:互联网 发布:抓包软件 编辑:程序博客网 时间:2024/06/04 23:33

 1. 交叉工具链:

交叉工具的集合,交叉编译工具是在A机器上编译生成,运行在B机器上的工具。而工具链则是由编译器、连接器、解释器和调试器组成的。

arm-linux-gcc 用于arm平台的交叉编译器
arm-linux-ld  用于arm平台的交叉链接器
arm-linux-readelf 显示文件的详细信息-包含储大小端、 运行平台以及对库函数的要求(file命令也可以检查运行平台,不过是简略信息)
arm-linux-objdump 用于arm平台的反汇编器
arm-linux-objcopy 用于arm的文件汇编转换器

 2. 连接器脚本

对程序的产生有至关重要的作用。其中第一个作用:将若干输入问件(.o文件)根据一定的规则合并为一个文件。另一个作用是将符号与地址绑定。其中-T参数用于指定自定义的脚本文件。一个可执行程序通常由:代码段、数据段、bbs段构成,连接器脚本也是如此。在设置起始地址,存储位置时希望能够保持4字节对齐方式,这样读取效率才够高(通过. = ALIGN(4)使保持四字节对齐)。计算地址长度,可以通过首地址与尾地址相减得到(例bbs_start与bbs_end)。想要指明文件运行顺序,可以通过设置代码段首文件来实现。


        SECTIONS{
            . = 0x20000000  ;
    
            . = ALIGN(4)    ;
            .text   :
            {
            *(.text)
            }
    
            . = ALIGN(4);
            .data   :
            {
            *(.data)
            }
    
            . = ALIGN(4);
            bss_start = . ;
            .bss    :
            {
            *(.bss)
            }
            bss_end = . ;
    }


 3. Makefile:

 规则:targets(目标):prerequisites(依赖)
        command(命令,前面加TAB键)
【注】:伪目标是表示没有依赖,只有目标的规则
        最终目标是make命令加上目标的名字表示最终目标是那个,如果make后没加任何东西表示最终目标是第一条规则的目标。
变量:重复出现的一段可以通过设置为一个变量进行替换
例:obj=func1.o func2.o
app1:app1.o $(obj)等价于app1:app1.o func1.o func2.o
系统变量:系统定义好的,可以直接使用的变量
$^ : 代表所有的依赖文件
$@ : 代表目标
$<:代表第一个依赖文件
通用规则:当出现多条规则执行命令一样,依赖文件个数一样,仅仅依赖文件后缀不同时,我们可以省略文件名,用%表示,例:


%.o : %.S
        arm-linux-gcc -g -o $@ $< -c


%.o : %.c
        arm-linux-gcc -g -o $@ $< -c 

【注】:在某个命令前加上@可以去掉该命令的回显;Makefile重命名通过make -f 重命名后的名字 方式重命名。


0 0
原创粉丝点击