gCc的优化编译举例 ●一个以前机器上的结果 dongeradonger gcctest]S 1s gcctest.c mo ml m2 m3 mytest.c dongeradonger gcctest]s time ./m3 real 0m2.756s user 0m2.658e sys 0m0.042s [dongerodonger gcctest]s time ./m2 real 0m2.733s user 0m2.643s sys 0m0.037g [dongeradonger gcctest]s time ./ml real 0m1.8295 user 0m1.767s sys 0m0.022s dongerad小onger gcctest]s time ./mo real 0m40,808s 0m39.632s sys 0m0.337s dongeradonger gcctest]S 4口4四是142刀00 长人式样作系蛇 Novesber28,201424/111
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . gcc的优化编译举例 . 一个以前机器上的结果 陈香兰(xlanchen@ustc.edu.cn) (计算机应用教研室@计算机学院嵌入式系统实验室 嵌入式操作系统 @苏州研究院中国科学技术大学Fall 2014) November 28, 2014 24 / 111
Outline 到 。交又开发 GNU Too1s简介 oGCC ●GNU binutils 。Gd山一调试器 。GNU make一软件工程工具 。GNT1d一链接器 @GN阳too1s交义开发环境的安装和武用 。GNU too1s交叉开发环境的安装 。使用安装好的交叉编译器编译he11o 。使用安装好的交又编译器编译1ix 。编译C1inux @小结和作业 4口4四是4P,在刀00 陈香兰(xlanchenoustc,edu,cn)(升界丸应 长人式择作系统 oveaber28,201425/111
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Outline . 1. 前言 交叉开发 .2 GNU Tools简介 GCC GNU binutils Gdb—调试器 GNU make——软件工程工具 GNU ld——链接器 .3 GNU tools 交叉开发环境的安装和试用 GNU tools 交叉开发环境的安装 使用安装好的交叉编译器编译hello 使用安装好的交叉编译器编译linux 编译µClinux 4. 小结和作业 陈香兰(xlanchen@ustc.edu.cn) (计算机应用教研室@计算机学院嵌入式系统实验室 嵌入式操作系统 @苏州研究院中国科学技术大学Fall 2014) November 28, 2014 25 / 111
GNU binutils I binuti1s是一组二进制工具程序集,是辅助GCC的主要软件 主要包括 O addr21ine 把程序地址转换为文件名和行号。 在命令行中给它一个地址和一个可执行文件名 它就会使用这个可执行文件的调试信息指出在给出的地址上是 哪个文件以及行号。 ar 建立、修改、提取归档文件。 归档文件是包含多个文件内容的一个大文件,其结构保证了 可以恢复原始文件内容。 as GNU汇编器,主要用来编译GNUC编译器gCc输出的汇编文件, 它将汇编代码转换成二进制代码,并存放到一个ob.ject文件中, 该目标文件将由连接器1d连接 陈香兰(x1 anchenoustc,edu,cn)(升界应 长人式样作系战 Nov6nter28.201426/111
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . GNU binutils I binutils是一组二进制工具程序集,是辅助GCC的主要软件 主要包括 1. addr2line 把程序地址转换为文件名和行号。 在命令行中给它一个地址和一个可执行文件名, 它就会使用这个可执行文件的调试信息指出在给出的地址上是 哪个文件以及行号。 2. ar 建立、修改、提取归档文件。 归档文件是包含多个文件内容的一个大文件,其结构保证了 可以恢复原始文件内容。 3. as GNU汇编器,主要用来编译GNU C编译器gcc输出的汇编文件, 它将汇编代码转换成二进制代码,并存放到一个object文件中, 该目标文件将由连接器ld连接 陈香兰(xlanchen@ustc.edu.cn) (计算机应用教研室@计算机学院嵌入式系统实验室 嵌入式操作系统 @苏州研究院中国科学技术大学Fall 2014) November 28, 2014 26 / 111
GNU binutils II C++filt 解码C++符号名,连接器使用它来过滤C++和Java符号, 防止重载函数冲突。 gprof 显示程序调用段的各种数据。 01d 是连接器,它把一些目标和归档文件结合在一起,重定位 数据,并链接符号引用,最终形成一个可执行文件。 通常,建立一个新编译程序的最后一步就是调用1d。 )nm 列出目标文件中的符号。 ⑧ob.copy 把一种目标文件中的内容复制到另一种类型的目标文件中。 1口401是42在刀00 陈香兰(xlanchenoustc,edu,cn)(计界机应 嵌人式操作套蛇 Novesber28,201427/111
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . GNU binutils II 4. C++filt 解码C++符号名,连接器使用它来过滤 C++ 和 Java 符号, 防止重载函数冲突。 5. gprof 显示程序调用段的各种数据。 6. ld 是连接器,它把一些目标和归档文件结合在一起,重定位 数据,并链接符号引用,最终形成一个可执行文件。 通常,建立一个新编译程序的最后一步就是调用ld。 7. nm 列出目标文件中的符号。 8. objcopy 把一种目标文件中的内容复制到另一种类型的目标文件中。 陈香兰(xlanchen@ustc.edu.cn) (计算机应用教研室@计算机学院嵌入式系统实验室 嵌入式操作系统 @苏州研究院中国科学技术大学Fall 2014) November 28, 2014 27 / 111
GNU binutils III ob.jdump 显示一个或者更多目标文件的信息· 使用选项来控制其显示的信息。它所显示的信息通常只有 编写编译工具的人才感兴趣· ranlib 产生归档文件索引,并将其保存到这个归档文件中· 在索引中列出了归档文件各成员所定义的可重分配目标文件。 O readelf 显示elf格式可执行文件的信息。 size 列出目标文件每一段的大小以及总体的大小。 默认情况下,对于每个目标文件或者一个归档文件中的每个 模块只产生一行输出。 1口41是42在刀00 陈香兰(xlanchenoustc,edu,cn)(计界机立 瓷人式操作委蛇 oveaber28,201428/111
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . GNU binutils III 9. objdump 显示一个或者更多目标文件的信息。 使用选项来控制其显示的信息。它所显示的信息通常只有 编写编译工具的人才感兴趣。 10. ranlib 产生归档文件索引,并将其保存到这个归档文件中。 在索引中列出了归档文件各成员所定义的可重分配目标文件。 11. readelf 显示elf格式可执行文件的信息。 12. size 列出目标文件每一段的大小以及总体的大小。 默认情况下,对于每个目标文件或者一个归档文件中的每个 模块只产生一行输出。 陈香兰(xlanchen@ustc.edu.cn) (计算机应用教研室@计算机学院嵌入式系统实验室 嵌入式操作系统 @苏州研究院中国科学技术大学Fall 2014) November 28, 2014 28 / 111