• 嵌入式之:Linux下文件编译过程


    本文主要三个部分:1.GNU GCC简介 

                              2.C/C++交叉编译器arm-elf-gcc

                              3.make文件,用于工程管理


     部分一:GNU GCC简介:

                该编译器基本功能:

                      (1)输出预处理后的文件(展开头文件和替换宏)

                      (2)输出.s的汇编文件

                      (3)输出二进制目标文件

                      (4)输出.o可执行文件

                      (5)转换文件格式

                      (6)生成静态库文件

    工具:

            arm-elf-gcc:她是前端程序通过调用其他程序实现把code编译为可执行文件

            arm-elf-as:将汇编转为ELF(executable and linking format)格式的文件,该目标文件具有重定位能力,方便被arm-elf-ld工具同其他目标模块文件整合。 <==就是平常说的中间目标文件

            arm-elf-ld:根据链接定位文件linkcmd中的定位信息,将所有的目标文件整合为一个单一的绝对定位的目标程序。

            arm-elf-ar:将多个obj文件打包成一个函数库(库中一般都是目标文件不是可执行文件也不是源代码)。

           arm-elf-objcopy:由.elf文件生成.bin文件(可执行文件)

           arm-elf-objdump:由.elf文件生成.list文件(反汇编文件)

           bin2hex:将可执行文件转为.hex文件


    部分二:C/C++交叉编译器arm-elf-gcc

          关键是对options的认识(仅仅列出个人认为重要的options):

                  1.控制选项

                       -c :输入源文件编译成目标文件

                       -S: 输入源文件编译成汇编文件

                       -o file :将输出内容存于file文件中

                       -v : 打印编译过程执行的命令

                  2.语言选项

                  3.警告选项

                    -w:关闭所有警告

                    -wall: 打开所有警告

                    -wimplicit:

                   -wno-implicit:

                  

                  4.调式选项

                   -g:在文件中产生调式信息

                  5.优化选项

                   -O0:不优化

                   -O1:一级优化

                   -O2:二级优化

                   -O3:三级优化

                  6.预处理选项

                   -E:运行C的预处理

                   -C:在运行-E预处理时不去掉注释

                   -D MACRO :  定义宏,默认值为1

                   -D MACRO= define : 定义宏,取值为define

                  7.汇编选项

                  9.搜索路径选项

                   -l dir : 设置搜索路径为dir ,可能还要跟-L 选项配合使用

                   -l-:设置只是对#include"file"中file进行搜索目录

                  10.各种指定文件生成选项

                    -o file: 将输出内容存于file文件中

                    -E:只对源文件进行预处理,默认输出到标准输出

                    -S:将C/C++文件生成汇编文件

                    -c:将源文件编译成目标文件

            注释:高亮的items有利于debug问题,跟踪执行过程。


        部分三:工程管理器make

               主要内容:

                            1.显示规则

                                  (1) targets: dependencies

                                               command

                                               .............

                                  (2)VPATH :设置文件的搜索路径(默认在当前路径下搜索)

                            2.隐含规则 <===一般不用,可读性不好

                            3.变量定义

                                 variable_name = variable_value

                               或者

                                 varialbe_name := variable_value

                              

                                  CC = arm-elf-gcc

                                  AS := arm-elf-as

                                  AR = arm-elf-ar

                                  LIBPATH = ./lib

                             引用变量:$(varialbe_name)  或者${variable_name}

                              makefile内部提供的常用变量:$@ 表目标名

                                                                      $< 表第一个依赖文件

                                                                      $^ 表所有的依赖文件

                             eg:   

                                         demo.o : demo.c demo.h

                                                ${CC} ${CFLAGS} $< -o $@

                                       上例子中,$< 值为demo.c $@值为demo.o $^值为demo.c demo.h

                             Makefile调用方法:

                                         $(function argumemts)

                                         ${function argumemts}

                              makefile内部提供的常用函数:

                                          $(subst,from_string ,to_string,text) <====将text中的from_sring替换为to_string

                                          $(patsubst pattern,replacememt,text) <=== 按模式pattern,替换text中字符串。

                            4.指令

                            5.注释 

  • 相关阅读:
    RN的win7开发环境部署和问题解决
    Android EditText弹出软键盘实现页面标题头不动,软键盘弹出在编辑框下面
    android打包生成apk时自定义文件名版本号。自定义项目字段等等
    Android ConstraintLayout 约束布局属性
    AS基本设置
    PermissionUtils
    kotlin之字符串模板
    kotlin之字符串
    kotlin之数组
    kotlin之布尔类型
  • 原文地址:https://www.cnblogs.com/chip/p/3972659.html
Copyright © 2020-2023  润新知