编程基础1

来源:互联网 发布:阿里云网站搭建 编辑:程序博客网 时间:2024/04/29 23:28

对于嵌入式编程来讲,通常文件在Linux系统编译后的可执行文件需要在目标板(ARM平台)上运行,因此需要交叉编译工具arm-linux-gcc等工具。
一个C文件到可执行文件通常需要4个步骤,预处理(preprocessing)、编译(compilation)、汇编(assembly)和连接(linking)。
(1) 预处理。
文件:.c -> .i,工具:arm-linux-cpp。
作用:执行源文件中以#开头的预处理指令,常见有包含命令“#include”、宏定义命令“#define”、条件编译命令“#if”等。
(2) 编译。
文件:.i -> .s , 工具:ccl。
作用:将C/C++代码翻译成汇编代码。
(3) 汇编。
文件:.s -> .o ,工具:arm-linux-as。
作用:将汇编代码翻译成一定格式的机器代码,生成目标文件。
(4) 连接。
工具:arm-linux-ld。
作用:将多个目标文件连接成一个目标文件。

arm-linux-gcc工具常用选项介绍:
1. 总体选项
(1)-c。
预处理、编译和汇编源文件,但是不作连接。
(2)-S。
编译后即停止,不进行汇编。
(3)-o file。
指定输出文件为file。
e.g. arm-linux-gcc –c –o main.o main.c
表示预处理、汇编和编译main.c文件生成mian.o文件。
2. 警告选项
-wall,基本打开了所有需要注意的警告信息,比如局部变量声明后没被使用等。
3. 调试选项
-g,以本地格式产生调试信息。
4. 优化选项
-O2,增加编译时间,提高生成代码的运行效果。

arm-linux-ld
1. 指定代码段、数据段、bss段的起始位置。
arm-linux-ld –Ttext 0x00000000 –g main.o –o main_elf,指定代码段的起始位置0x00000000
2. 使用连接脚本设置地址
arm-linux-ld –Tmain.lds –o main_elf main.o,使用连接脚本main.lds来设置可执行文件main_elf中的地址信息。

arm-linux-objcopy
格式转换,可以将ELF格式转换为二进制文件。

原创粉丝点击