gcc/arm-linux-gcc 浅析
2015-07-07 20:06
351 查看
编译过程的理解
预处理:针对预处理命令,例如#include,#define,#ifdef…#ednif。将相应的预处理命令执行,例如#include的包含,#define的替换等,将.c/.cpp文件转化为.i文件,生成的.i文件会比.c/.cpp文件大的多,主要是因为包含进大量的.h文件。
编译:预处理之后的.i文件将用来做具体的编译,将.i文件转化为汇编.s文件。对于.s文件,我们可以通过汇编的语法了解程序内部的具体流程。特别的,由于.s文件相对于.i文件抛弃了大量的无用内容,所以.s文件会比.i文件小的多。同时。由于汇编语言相对于c/c++较为繁琐,所以.s文件会比.c/.cpp大一些。
汇编:上一步生成的.s文件将会用来汇编成机器代码.o文件,同时也是可执行文件。自然,机器代码要比汇编语言更繁琐一些,相应的.o文件会比.s文件大一些。
连接:在写程序的时候不可避免的会用到一些库文件,或是本身的源文件就由多个源文件组成,也就是说,汇编的过程将程序的各个有机部分编译成功,最后一步自然要将各个部分的.o文件结合库文件连接到一起,生成最终的可执行.o文件。
gcc/cc/arm-linux-gcc的常用选项
-c: 编译不连接, .c/.cpp->.o
-S: 不汇编, .c/.cpp->.s
-E: 不编译, .c/.cpp->.i
-o file: 生成名为file的文件
-v: 显示配置命令
-Wall: 查看所有警告,特别是直接编译不会显示的一些警告
-g: 调试专用
-O: 优化
-llibrary: 连接名为liblibrary.a的库
-shared: 生成一个库文件
-Ldir: 假如链接的搜索路径
-Idir: 假如头文件搜索目录
-nostartfile: 不连接标准启动文件
-nostdlib: 不连接标准启动文件和标准库文件
ld/arm-linux-ld常用选项
-T:指定程序或数据区的存放地址,例如-Ttext/-Tdata/-Tbss addr(16进制表示)
-T filename: 指定连接脚本
objdump/arm-linux-objdump常用选项
格式: arm-linux-objdump -D main.o > main.s
-d: 反汇编可执行段
-D: 反汇编所有段
预处理:针对预处理命令,例如#include,#define,#ifdef…#ednif。将相应的预处理命令执行,例如#include的包含,#define的替换等,将.c/.cpp文件转化为.i文件,生成的.i文件会比.c/.cpp文件大的多,主要是因为包含进大量的.h文件。
编译:预处理之后的.i文件将用来做具体的编译,将.i文件转化为汇编.s文件。对于.s文件,我们可以通过汇编的语法了解程序内部的具体流程。特别的,由于.s文件相对于.i文件抛弃了大量的无用内容,所以.s文件会比.i文件小的多。同时。由于汇编语言相对于c/c++较为繁琐,所以.s文件会比.c/.cpp大一些。
汇编:上一步生成的.s文件将会用来汇编成机器代码.o文件,同时也是可执行文件。自然,机器代码要比汇编语言更繁琐一些,相应的.o文件会比.s文件大一些。
连接:在写程序的时候不可避免的会用到一些库文件,或是本身的源文件就由多个源文件组成,也就是说,汇编的过程将程序的各个有机部分编译成功,最后一步自然要将各个部分的.o文件结合库文件连接到一起,生成最终的可执行.o文件。
gcc/cc/arm-linux-gcc的常用选项
-c: 编译不连接, .c/.cpp->.o
-S: 不汇编, .c/.cpp->.s
-E: 不编译, .c/.cpp->.i
-o file: 生成名为file的文件
-v: 显示配置命令
-Wall: 查看所有警告,特别是直接编译不会显示的一些警告
-g: 调试专用
-O: 优化
-llibrary: 连接名为liblibrary.a的库
-shared: 生成一个库文件
-Ldir: 假如链接的搜索路径
-Idir: 假如头文件搜索目录
-nostartfile: 不连接标准启动文件
-nostdlib: 不连接标准启动文件和标准库文件
ld/arm-linux-ld常用选项
-T:指定程序或数据区的存放地址,例如-Ttext/-Tdata/-Tbss addr(16进制表示)
-T filename: 指定连接脚本
objdump/arm-linux-objdump常用选项
格式: arm-linux-objdump -D main.o > main.s
-d: 反汇编可执行段
-D: 反汇编所有段
相关文章推荐
- 在Windows平台下使用安装GCC(图)
- Aut2Exe编译au3脚本为可执行文件
- CentOS 6.3下编译安装Ruby 2.0笔记
- 把Lua编译进nginx步骤方法
- Lua中编译执行代码相关的函数详解
- Chrome Visual Studio 2005下的编译过程
- Windows下使用Cygwin编译MySQL客户端
- android的编译和运行过程深入分析
- linux使用gcc编译c语言共享库步骤
- c#中xml文档注释编译dll引用到其它项目示例
- Lua cjson模块编译笔记及错误解决方法
- SQLSERVER编译与重编译发生场景及重用的利弊介绍
- 浅析使用Turck-mmcache编译来加速、优化PHP代码
- 如何编译libfreetype方法详解
- 深入理解C语言中编译相关的常见错误
- 在VS2008中编译MYSQL5.1.48的方法
- Nginx编译参数大全 configure参数中文详解
- centos下编译安装mysql报错解决方案
- Lua的编译、执行和调试技术介绍
- Mac下使用Eclipse编译C/C++文件出现 launch failed, binary not found 解决方案