EDA365电子论坛网
标题:
给大家分享一个arm-linux-系列工具,ld,ar,as,objcopy
[打印本页]
作者:
haidaowang
时间:
2019-10-10 10:37
标题:
给大家分享一个arm-linux-系列工具,ld,ar,as,objcopy
4 N! }7 h- Z- s8 X2 n) X
一些编译器相关知识学习。
4 v! e- j( S' Y) }
& k( C$ C/ o6 B* _
GNU GCC简介:
! j. L$ r( p% t. `, L! l
# J" S+ ~$ F: \) w2 ~, q% f
GNU GCC是一套面向嵌入式领域的交叉编译工具,支持多种编程语言、多种优化选项并且能够支持分步编译、支持多种反汇编方式、支持多种调试信息格式,目前支持X86、ARM7、StrongARM、PPC4XX、MPC8XX、MIPS R3000等多种CPU。
& L. K2 S* G' Q! O7 Q( b
- ?$ m5 |/ u9 A0 P: I8 |" H! K. L
GNU GCC的基本功能包括:输出预处理后的C/C++源程序(展开头文件和替换宏)
0 O; k! r" M0 P0 k
$ o) f B) w0 C3 `
输出C/C++源程序的汇编代码
2 J& f1 h' h/ y
# T& Y" E. j$ @: E6 t. \
输出二进制目标文件
8 H ^! D7 `9 o5 M
4 E3 y: B, a( z7 o& E% D
生成静态库
- U- f7 \$ Y1 ?+ i/ B8 z% [
4 w7 \: m- R5 W! ]& J! A$ k
生成可执行程序
8 x. x* i& y0 H; v
* X" [. @) \% `- x6 f2 p
转换文件格式
5 M9 K! B- ^: @ l! g: C/ R# L
" R# N0 a: b) D o% i! ^, U$ W
GCC 组成:
+ R r- G) s2 I- Y' x5 o+ ]
( b L$ T2 M/ B4 H
1. C/C++交叉编译器arm-elf-gcc
9 ~% ?& R# I/ O1 _/ I
- {# N- r' h4 x( l
arm-elf-gcc是编译的前端程序,它通过调用其他程序来实现将程序源文件编译成目标文件的功能。
/ q0 B& u: p' F2 ?1 _8 Q
3 i4 O, F; u% Y& _
编译时,它首先调用预处理程序(cpp)对输入的源程序进行处理,然后调用 cc1 将预处理后的程序编译成汇编代码,最后由arm-elf-as将汇编代码编译成目标代码。
) Z$ m( j$ }: B
9 |# ]# Y- W6 p
arm-elf-gcc具有丰富的命令选项,可以控制编译的各个阶段,满足用户的各种编译需求。
6 z4 W8 C0 K( g
' J9 z% g$ Q2 N, \& @- j
2. 汇编器 arm-elf-as
0 e. x4 A) t1 X/ ]
6 p2 g; @/ L; N: T
arm-elf-as将汇编语言程序转换为ELF (Executable and Linking Format,执行时链接文件格式)格式的可重定位目标代码,这些目标代码同其它目标模块或函数库易于定位和链接。
& k7 N4 H# B8 N# X7 L7 S) @
0 r7 f! h+ J9 j0 r5 a
arm-elf-as产生一个交叉参考表和一个标准的符号表,产生的代码和数据能够放在多个区 (Section)中。
8 a7 l8 U0 w" c+ `
1 v8 a1 Y0 l( f m7 C+ s/ Q3 l
3. 连接器arm-elf-ld
! N& y% f8 w0 f$ F# @& [
% b' x1 j8 b5 j
arm-elf-ld根据链接定位文件Linkcmds中的代码区、数据区、BSS区和栈区等定位信息,将可重定位的目标模块链接成一个单一的、绝对定位的目标程序。
6 k( L1 [; G$ S5 Z8 N% Z- O
1 H( F& j: V/ H F, l, j# @
" m' B! O% G% u1 I" L
3 }0 \6 f8 e) f* `
+ B5 Z) M# _; r8 N. [
! b* N7 @0 r; s' p N* f
7 M+ V; Q. A5 r3 Q( m" @9 V
}5 }7 Y( W! h. j; D" W% A1 S
作者:
helendcany
时间:
2019-10-10 22:56
好东东必须顶。
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2