编译过程简介

原创 2012年03月31日 10:02:51

        之前做了一次在Android上的移植,后来多次被人问到移植的相关问题。正好做完那个项目很久了也没有认真的把编译的知识进行单纯的整理。有很多问题没有总结在此,是因为我没遇到。有些知识还是需要用到的时候再学也为时未晚的。好了不罗嗦了,开始对编译的过程进行简单的总结吧。

        linux应用程序编译时,需要交叉编译GCC,它依赖于所运行系统的内核、glibc库等。针对ARM处理器平台建立交叉编译环境,通常是要在pc上建立目标代码为ARM的编译交叉连(toolchains),它可以编译和处理Linux内核及应用程序。需要下面几个工具链的源码。

       -binutils,一组编译开发工具,包括连接器汇编器以及其他用于目标文件和档案的工具。它包括:

-----addr2line把程序地址转换为文件名和行号。在命令中给它一个地址和一个可执行文件名,它就使用这个可执行文件的调试信息之处在给出的地址上是那一个文件及行号。

------ar建立、修改、提取归档文件。归档文件是包含多个文件内容的一个大文件,其结构保证了可以恢复原始文件内容。

------as 主要用来编译GNU C编译器(gcc)输出的汇编文件,产生目标文件由连接器ld连接。

------c++filt ,连接器使用它来过滤c++和java符号,防止重载函数冲突。

------gprof显示程序调用段的各种数据。

------nm列出目标文件中的符号。

------objcopy把目标文件中的内容复制到另一种类型的目标文件中。

-----objdump显示一个或更多目标文件的信息。使用选项来控制其显示的信息。它所显示的信息很有用,可用它观察到程序中全局变量和函数编译所处的数据段和地址。

-----ranlib产生归档文件索引,并将其保存到这个归档文件中。在索引列出了归档文件个成员所定义的可重分配的目标文件。

----readelf显示elf格式包括可执行文件的信息。

----size列出目标文件每一段的大小以及总体的大小。

-----strings打印某个文件的可打印字符串。这些字符串最少4个字符长也可以使用选项-n设置字符串的最小长度。默认情况下,它只打印目标文件初始化和可加载段中的可打印字符;对于其他类型的文件,它只打印整个文件的可打印字符,这个程序对于了解非文本文件的内容很有帮助。

----strip丢弃目标文件中的全部或者特定符号。通常,连接完成的elf格式的文件是没有经过strip的,他/它包括符号表等多余信息,可使用这个工具让elf文件更精简。通常他会在应用程序的最后发布时使用。

     --gcc是linux中最重要的软件开发工具。它是gnu c和c++的编译器。利用gcc编译器可同时编译并链接c和c++源程序。

     --glibc,提供系统调用和基本函数的c库(标准c库)如open\mallloc、printf等。所有linux上的c程序编译时都需要与glibc库链接。如果是动态连接的程序,在运行时也要用到它。另外面对一些简单的应用,也可以使用更为精简的C库,如uClibc。

     --glibc-linuxthreads,POSIX(Portable Operating System Interface,可移植操作系统接口)线程库。

     --linux内核源码。

当然,你如果时间充足的情况下,完全可以试图自己去做一个交叉编译环境,但是本人曾试着努力过。但是花了近两个月的时间,最终因为课程的原因还是使用了现成的交叉编译链。

        首先需要明确在Android中存在两种交叉编译链,一个是arm-eabi-gcc;另一个是arm-none-linux-gnueabi-gcc。通常后面的支持的库函数相对多一点。但是Android本身使用的是前者。


gcc简介及编译过程

(1)编译器 gcc 简介           Linux系统下的 gcc(GNU C Compiler)是GNU推出的功能强大、性能优越的多 平台编译器,它是GNU的代表作品之一,gcc是可以...

C语言编译过程简介

C语言编译原理简介刚开始接触编程的时候,只知道照书敲敲代码,一直都不知道为什么在windows平台下代码经过鼠标那样点击几下,程序的结果就会在那个黑色的屏幕上。现在找了个机会将C语言的编译原理做一下小...

【C语言复习(七)】编译过程的简介

1、被隐藏的编译过程: 2、编译过程: (1)预编译: · 处理所有的注释,以空格代替; · 将所有的#define删除,并展开所有的宏定义 · 处理条件编译指令:#if,#ifdef,...
  • CMbug
  • CMbug
  • 2014年06月12日 16:28
  • 551

SDL以及扩展库的交叉编译过程简介

近来用c语言加SDL图形工具做了一个名曰健康卫士的应用软件。软件的是准备移植到开发板上的,但就是交叉编译环境配置的让人纠结。至于ifconfigure的修改前人有了深刻的实践,我在应用中发现了一些错误...

TrueCrypt简介、在VS2008下的编译过程

TrueCrypt简介、在VS2008下的编译过程 分类: 开源软件(金山、Nginx、Gual)/设计模式 window xp 驱动(USB)/FireFox插件/汇编 2012-...

编译过程简介

程序 编译 和 连接 的过程

c++编译过程简介

了解编译过程的益处 c++工程相关的问题 什么是库?静态库和动态库又有什么区别?头文件起什么作用? 编译过程简介 名词: 编译:把源文件中的源代码翻译成机器语言,保存到目...
  • TColin
  • TColin
  • 2017年05月12日 15:24
  • 354

SDL以及扩展库的交叉编译过程简介

下面我介绍一下SDL以及SDL的扩展库在arm11上的交叉编译 在这里我将SDL 交叉编译的相关都安装在/opt/arm目录下 相关简介: SDL官方网站 http://www.libsdl.org...

GDAL库简介以及在Windows下编译过程

GDAL库简介以及在Windows下编译过程

C++程序编译过程简介

转载自:http://blog.csdn.net/imyfriend/article/details/8684155 编译过程主要分为4个过程   1) 编译预处理  预编译程...
  • y452801
  • y452801
  • 2014年09月01日 11:09
  • 267
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:编译过程简介
举报原因:
原因补充:

(最多只允许输入30个字)