嵌入式Linux应用开发完全手册(一)嵌入式Linux基础知识

嵌入式Linux应用开发完全手册

3 嵌入式Linux基础知识

3.1 交叉编译工具

  • 编译工具链,编译工作由几个步骤完成,分别用到了不同的工具
    • PC端应用
      • gcc
      • ld
      • objcopy
      • objdump
    • 交叉编译(编译和运行在不同的环境下),arm平台工具链
      • arm-linux-gcc
      • arm-linux-ld
3.1.1 arm-linux-gcc
  • C/C++文件的编译步骤
    • 预处理 preprocessing
    • 编译 compilation
    • 汇编 assembly
    • 连接 linking
预处理

根据预处理命令(#开头的命令)修改源文件,形成.i文件
用到额工具是arm-linux-cpp

编译

将经过预处理的.i文件,翻译成汇编代码,.s文件
用到的工具是ccl

汇编

将汇编代码文件.s翻译成目标文件 .o文件
用到的工具是arm-linux-as

连接

将汇编生成的目标文件和库文件连接起来,最终生成特定平台的可执行文件
用到的工具是arm-linux-ld
连接器处理的文件一般包括
- .o 目标文件
- .a 库文件

arm-linux-gcc的重要选项
  • -E 预处理 :预处理结果通过stdout显示出来
  • -S 预处理、编译 :可以生成.s文件
  • -c 预处理、编译、汇编 :可以生成.o文件
  • -o 指定输出文件名 :如果不指定名成,按照一般规则生成
  • -v 显示制作gcc命令时的配置 :显示更详细的编译信息
  • -Wall 显示所有警告信息 :Warning ALL
  • -g 产生调试信息,以便GDB使用 : 要使用gdb调试,必须有这个选项
  • -O 优化选项 :O0,O1,O2,O3 4级优化,一般应用选O2
  • [object-file-name] :连接的时候,目标文件和库文件名称
  • -l[library] :连接名为l[library]的库文件,库文件名称规则lib[libraay].so
  • -nostartfiles :不连接系统标准启动文件,编译bootloader, 内核的时候会用到
  • -nostdlib :不连接系统标准启动文件和标准库文件,编译bootloader和内核会用到
  • -static :组织连接共享库,打开这个选线柜让编译出来的结果很大,不动态连接一些库,那么就都包含在编译结果里边了
  • -shared :生成库文件
  • -I[dir] :头文件搜索路径中添加 dir
  • -L[dir] :-l指定某个库需要连接的时候,这个参数增加搜索路径,比如-L. 当前目录作为搜索目录添加进来
/ * 举例 */ 
[main.c]    - include [sub.h]
[sub.h]
[sub.c]     - include [sub.h]

--------

gcc -c -o main.o main.c
gcc -c -o sub.o sub.c
gcc -o test main.o sub.o

--------

gcc -S -o main.s main.c
gcc -E main.c | less

--------
gcc -shared -o sub.a sub.o sub2.o sub3.o
arm-linux-ld选项
  • -T :指定代码段、数据段、bss段的起始位置,或者指定一个连接脚本
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值