文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>GNU toolchain

GNU toolchain

时间:2007-04-13  来源:ilttv.cn

         GNU toolchain(GUN开发工具链)是进行linux环境开发得基本工具,主要包括三个部分:GCC,glibc,binutils。

1、  GCC

目前GCC已经并不仅仅的代表C编译器,而是表示编译器的家族(GNU Compiler Collection),它能够编译C,C++,Ada,Object-C和Java等多种高级语言。

这里要提一下得是有关GCC版本得问题,虽然目前GCC得最新版本已经到了4.1.2,但是因为GCC与你的系统有很大的关系,不要轻易的更换你使用的GCC版本,否则很有可能引起之前好好的软件在新的版本下编译失败。对于我而言,目前我常用的还是GCC3.3,它也是debian sarge默认的GCC版本。

GCC的参数有很多,常用的有下面这些,其实主要是在我们编写简单的Makefile文件时使用。

-c  只编译不链接,生成目标文件

-S  只编译,生成汇编代码

-E  只进行预处理

-o  指定输出的文件名

-g  生成调试信息

-pg 生成gprof工具需要的额外代码

-O  进行代码优化

-W  设置产生警告信息的级别

-I  指定包含文件(头文件)的目录

-L  指定库文件目录

-D  预定义代码中使用的宏

l         如果你要使用GDB调试你的应用,不要忘记加上-g参数。

l         如果你要使用gprof工具分析程序,不要忘记加上-pg参数。

2、binutils

         binutils主要包括用来创建、分析和使用二进制文件的一些工具。可能我们平时最常接触的是链接器ld和汇编器as。不过其它工具对于优化我们的程序也相当有用。如果使用的是debian,执行

         dpkg –L binutils

我们就可以看到在binutils包了包含了哪些工具。

l         连接器ld

把目标文件链接为可执行文件,或库文件。ld同样有非常多的参数,最简单的情况下,通过ld生成一个可执行文件,使用类似下面的命令:

         #ld –o test test.o

l         汇编器as

注意,虽然GNU汇编一般称为gas,但是命令却为as。根据不同的硬件平台,as的参数会有所不同,但是有一部分参数是每个平台都通用的。最简单的情况,将汇编语言程序test.s转换为目标文件,使用下面的命令:

         #as –o test.o test.s

需要注意的一点是,GNU汇编器使用的是AT&T语法,与intel的汇编语法并不相同。

l         size

列出目标文件或者归档文件(archive)中每一段的大小以及总体大小。默认情况下,对于每个目标文件以及归档文件中的每个模块产生一行输出。

l         objdump

objdump不仅能够显示汇编语言目标文件的信息,而且能够将汇编文件反汇编为指令码:

         #objdump –d test.o

l         ar

ar建立、修改档案文件,或者从档案文件中提取成员文件。档案文件是包含多个文件内容的一个大文件,其结构保证了可以恢复原始文件内容。

-d  从档案文件中删除成员文件

-q  在档案文件的末尾追加成员文件

-m  在档案文件中移动成员文件的位置

-p  打印档案文件中成员文件的内容,不替换已有的同名文件

-r  将文件插入档案文件,覆盖已有的同名文件

-t  显示档案文件中成员文件的列表

-x  从档案文件中提取成员文件

ar可以用来创建静态链接库。

l         strings

显示文件中的可打印字符。一般用来查看非文本文件的内容。

l         ranlib

生成档案文件的索引,并将它保存在档案文件里。这个索引列出了成员文件定义的每个符号,我们可以使用nm命令查看它。

l         objcopy

可以复制一个目标文件的内容到另一个目标文件。

l         addr2line

把程序的地址转换为文件名和行号。指定一个可执行文件的地址,它能够通过调试信息估算出与之关联的文件名和行号。

l         readelf

显示elf文件的信息。

l         nm

列出目标文件的符号。也可以列出档案文件的符号:

         #nm –s libtest.a

l         strip

丢弃目标文件或档案文件中的符号。strip直接修改参数指定的文件,不为修改后的文件重新命名。

l         c++filt

在C++和JAVA语言里,常要用到函数重载,在汇编的层面上,需要将这些重载函数的不同版本编码为独一无二的标识符,这是通过mangling来完成的,而c++filt则完成相反的工作。

l         gprof

gprof可以用来分析应用程序的执行,显示程序中每个函数的调用次数及时间,我们可以从中找出耗费处理器时间最多的函数进行优化。

使用gprof时,它会生成一个包含了函数调用图标的文件gmon.out,包含了应用程序中每个函数的计时信息。但是要注意的是,每次执行gprof,都会覆盖gmon.out,因此,如果你要对你的应用进行多次采样分析,就必须在每次执行后备份gmon.out文件。

3、glibc

         glibc是提供系统调用和基本函数的C库。在glibc的包里也包括了很多很有用的工具,可能我们平时在使用的时候都不会想到它是在glibc包里J,下面是几个常用的:

l         ldconfig

运行时动态的配置动态链接库。

l         ldd

列出应用所依赖的动态链接库。

l         locale

获取系统的locale信息。

l         iconv

转换指定文件的编码形式。

l         zdump

显示时区信息。

l         tzselect

可以显示现有的时区,也可以显示其它时区或国家的当前时间。

参考:http://www.ednchina.com/blog/exvision/357/message.aspx

排行榜 更多 +
奇境小镇MOD作弊菜单

奇境小镇MOD作弊菜单

角色扮演 下载
黑暗荒野2无限金币版

黑暗荒野2无限金币版

角色扮演 下载
骑战烈火之剑作弊菜单版

骑战烈火之剑作弊菜单版

角色扮演 下载