00. 目录

文章目录

  • 00. 目录
  • 01. GNU工具概述
  • 02. 常用文本文件
  • 03. 常用二进制文件
  • 04. Binutils工具集
  • 05. GCC工具
  • 06. 附录

01. GNU工具概述

​ 在Linux中,GNU Tools是主要的程序的开发工具,这组工具主要用于生成代码和分析程序。GNU Tools最重要的组成部分是GCC。GCC是GNU Compiler Collection的缩写,是一个非常优秀的跨平台编译器集合,支持x86、ARM、MIPS和PowerPC等多种目标平台,支持C、C++、Java、ADA、Fortran和Pascal等多种高级语言。

​ GCC能完成从C、C++、Objective-C等源文件向运行在特定CPU硬件上的目标代码的转换。对于通用计算机、一般使用GCC生成x86的可执行代码,对于嵌入式开发系统使用交叉编译GCC,生成目标机可以执行的程序。

02. 常用文本文件

*.c C语言源文件

*.C *.cxx *.cc C++语言源文件

*.i 预处理后的C语言源文件

*.ii 预处理后的C++语言源文件

*.s *.S 汇编语言文件

*.h 头文件

03. 常用二进制文件

*.o 目标文件

*.so 动态库

*.a 静态库

.c为后缀的文件,C语言源代码文件;

.a为后缀的文件,是由目标文件构成的档案库文件;

.C,.cc或.cxx 为后缀的文件,是C++源代码文件且必须要经过预处理;

.h为后缀的文件,是程序所包含的头文件;

.i 为后缀的文件,是C源代码文件且不应该对其执行预处理;

.ii为后缀的文件,是C++源代码文件且不应该对其执行预处理;

.m为后缀的文件,是Objective-C源代码文件;

.mm为后缀的文件是Objective-C++源代码文件;

.o为后缀的文件,是编译后的目标文件;

.s为后缀的文件,是汇编语言源代码文件;

.S为后缀的文件,是经过预编译的汇编语言源代码文件。

04. Binutils工具集

​ GCC是一组工具的集合,包含了预处理器、编译器、汇编器、连接器部分。当使用GCC的时候,将根据需要调用相应的工具。对于默认的文件名,GCC可以自动选择工具来完成文件处理过程。从C语言的源程序到可执行文件的转换,实质上是依靠GCC调用一系列工具完成的。

​ Binutils是一个二进制工具的集合,包含了汇编、链接以及一系列的辅助工具。binutils是辅助GCC的重要工具集,主要包含以下的工具。

as: GNU汇编器,用于将处理器的汇编格式代码转换成可执行代码,并存储到目标文件.o文件中

ld: GNU连接器,用于将一个或者多个目标文件(.o)、库组合成一个可执行的程序,或者生成静态库或者静态库。

ar: 归档工具,可以将多个文件组合成一个大文件,并且可以读取原始文件的内容

strip: 去除文件中的符号

nm: 可以i显示目标文件中的符号

objcopy: 转换二进制代码的工具,可以将二进制代码转换成各种格式

objdump: 显示目标文件的反汇编工具

readelf: 显示ELF文件的各种信息

strings: 显示文件中可打印字符

ranlib: 产生归档文件的索引,并将其保存到归档文件中。

addr2line: 可以将一个可执行程序的地址映射到源文件的对应的行

gprof: 显示程序调用段的各种信息。

05. GCC工具

5.1 gcc用法参考

[root@deng test]# gcc --help
用法:gcc [选项] 文件...
选项:-pass-exit-codes         在某一阶段退出时返回最高的错误码--help                   显示此帮助说明--target-help            显示目标机器特定的命令行选项(使用‘-v --help’显示子进程的命令行参数)-dumpspecs               显示所有内建 spec 字符串-dumpversion             显示编译器的版本号-dumpmachine             显示编译器的目标处理器-print-search-dirs       显示编译器的搜索路径-print-libgcc-file-name  显示编译器伴随库的名称-print-file-name=<库>    显示 <库> 的完整路径-print-prog-name=<程序>  显示编译器组件 <程序> 的完整路径-print-multi-directory   显示不同版本 libgcc 的根目录-print-multi-lib         显示命令行选项和多个版本库搜索路径间的映射-print-multi-os-directory 显示操作系统库的相对路径-Wa,<选项>               将逗号分隔的 <选项> 传递给汇编器-Wp,<选项>               将逗号分隔的 <选项> 传递给预处理器-Wl,<选项>               将逗号分隔的 <选项> 传递给链接器-Xassembler <参数>       将 <参数> 传递给汇编器-Xpreprocessor <参数>    将 <参数> 传递给预处理器-Xlinker <参数>          将 <参数> 传递给链接器-combine                 将多个源文件一次性传递给汇编器-save-temps              不删除中间文件-pipe                    使用管道代替临时文件-time                    为每个子进程计时-specs=<文件>            用 <文件> 的内容覆盖内建的 specs 文件-std=<标准>              指定输入源文件遵循的标准--sysroot=<目录>         将 <目录> 作为头文件和库文件的根目录-B <目录>                将 <目录> 添加到编译器的搜索路径中-b <机器>                为 gcc 指定目标机器(如果有安装)-V <版本>                运行指定版本的 gcc(如果有安装)-v                       显示编译器调用的程序-###                     与 -v 类似,但选项被引号括住,并且不执行命令-E                       仅作预处理,不进行编译、汇编和链接-S                       编译到汇编语言,不进行汇编和链接-c                       编译、汇编到目标代码,不进行链接-o <文件>                输出到 <文件>-x <语言>                指定其后输入文件的语言允许的语言包括:c c++ assembler none‘none’意味着恢复默认行为,即根据文件的扩展名猜测源文件的语言-w            不显示警告信息-W           指定需要显示的警告信息-Wall        表示显示所有的警告信息-Werr        将警告信息当成错误、并终止编译-DMACRO      定义宏MACRO为字符串1-DMACRO=DEF   定义MACRO宏为字符串DEF-UMACRO      取消对MACRO宏的定义-ggdb           生成可被gdb使用的标准调试信息-mXXX           针对XXX CPU进行优化,例如XXX可以是486 586等-O0            不进行代码优化-O或者-O1     进行一般的代码优化,减少执行代码大小和执行的时间-O2           比-O1进行更多的优化,减少执行代码大小和执行的时间-O3            比-O2更进一步优化-MM           输出源文件的依赖关系-ansi         编译器将所有的gnu的编译器特性都关掉,可以让程序和Ansi标准兼容-include file 编译之前将file包含进去,相当于在所有编译的源文件最前面加入include <file>语句-imacros file 与-include file一样,不过这个文件在具体编译的时候只有里面定义的宏才起作用,所以只用来在file文件中定义宏-nostdinc    在搜寻include的文件路径中去掉标准的C语言头文件搜索路径,例如stdin.h文件就是放在标准头文件搜索路径下。-C             通-E参数配合使用,让预处理后的结果保留注释,一遍程序更易读。-nostartfiles 在链接的时候不把系统相关的启动代码链接起来-nostdlib   在链接的时候不把标准库链接进来以 -g、-f、-m、-O、-W 或 --param 开头的选项将由 gcc 自动传递给其调用的不同子进程。若要向这些进程传递其他选项,必须使用 -W<字母> 选项。

5.2 参考示例

[root@deng test]# ls
a.out  main.c  myputs.c  myputs.h  test.c  test.h
[root@deng test]# gcc -pipe -g -Wall -I. -c test.c -o test.o
[root@deng test]# #解释
-g:     表示含有调试信息
-Wall:    表示输出所有的警告
-I.     表示包含当前目录作为头文件搜索路径,这个选项用于增加搜索头文件的路径
-pipe:      表示使用管道替换临时文件
-o:      指定输出地目标文件的名称

06. 附录

6.1【Linux】GCC程序开发工具(上)
6.2 【Linux】GCC程序开发工具(中)
6.3 【Linux】GCC程序开发工具(下)

【Linux】GCC程序开发工具(上)相关推荐

  1. 【Linux】GCC程序开发工具(下)

    00. 目录 文章目录 00. 目录 01. GCC的二进制工具 02. objdump 03. objcopy命令 04. 总结 05. 附录 01. GCC的二进制工具 objdump 显示目标文 ...

  2. 【Linux】GCC程序开发工具(中)

    00. 目录 文章目录 00. 目录 01. GCC的二进制工具 02. ar命令 03. readelf命令 04. strings命令 05. nm命令 06. strip命令 07. 附录 01 ...

  3. 【Linux系统】开发工具(上) {软件包管理器yum,更新yum源,文本编辑器vim,vim的四种基本模式,vim指令集,代码编译器gcc/g++}

    一.软件包管理器:yum 1.1 yum是什么? Linux下软件的安装方法: 源码安装:下载源码,在本地自行编译,然后才能安装. rpm安装:红帽软件包管理工具,属于安装包安装. yum安装:本身会 ...

  4. 【Linux】Linux环境基础开发工具使用 —— yum | vim | gcc g++ | gdb | make makefile | 进度条 | git

    Linux环境基础开发工具使用 1. Linux软件包管理器yum 1.1 什么是软件包 1.2 软件安装三板斧 1.2.1 查看软件包 1.2.2 安装软件 1.2.3 卸载软件 2. vim 2. ...

  5. 微信小程序开发工具第一次使用,网络连接不上怎么办

    安装成功之后,爆出了一个bug,二维码始终出不来. (C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\16486989 ...

  6. Linux下C++开发工具介绍

    概述     就C++开发工具而言,与Windows下微软(VC, VS2005等)一统天下相比,Linux/Unix下C++开发,可谓五花八门,各式各样.Emacs, vi, eclipse, an ...

  7. 《嵌入式 Linux应用程序开发标准教程(第2版)》——第1章 Linux快速入门 1.1 嵌入式Linux基础...

    本节书摘来自异步社区<嵌入式 Linux应用程序开发标准教程(第2版)>一书中的第1章,第1.1节,作者 华清远见嵌入式培训中心,更多章节内容可以访问云栖社区"异步社区" ...

  8. 《嵌入式 Linux应用程序开发标准教程(第2版)》——1.1 嵌入式Linux基础

    本节书摘来异步社区<嵌入式 Linux应用程序开发标准教程(第2版)>一书中的第1章,第1.1节,作者:华清远见嵌入式培训中心,更多章节内容可以访问云栖社区"异步社区" ...

  9. Linux应用程序开发 基础知识

     Linux应用程序开发 本文讲述了linux应用程序开发的基本内容.值得学习! Copyright © 2006 本文遵从GNU 的自由文档许可证(Free Documentation Lice ...

最新文章

  1. 文件操作(ifstream、ofstream、fstream)
  2. DbHelperSQL.cs
  3. javascript 语言标准 es6简介
  4. ROS学习(六):CMakeLists.txt 文件
  5. AsyncTask中各个函数详细的调用过程,初步实现异步任务
  6. 写程序过程中写程序的注意事项
  7. ubuntu下安装vmtools失败,提示The path is not a valid path to the 3.5.0-17-generic kernel headers的解决办法...
  8. 汉澳sinox2014x64server已经能够下载
  9. JavaScript实现的List(集合)类
  10. MySQL高级知识(九)——慢查询日志
  11. pycharm显示全部数据_必备 | 提升效率的数据分析工具,吴恩达都在用
  12. 无卡支付,快捷支付,认证支付,协议支付,代扣区别与联系
  13. 【hexo】fluid中文乱码问题解决
  14. sagemath matlab,开源跨平台数学软件SageMath v8.1
  15. 网络编辑员国家职业标准
  16. 如何卸载Adobe Premiere Pro CC 2017和Adobe Photoshop CC 2018
  17. C/C++编程学习 - 第5周 ③ 圆锥体的体积
  18. 电子警察技术原理分析
  19. 【Python】绘制 对数函数
  20. curl使用用户名密码

热门文章

  1. silverlight之ToolTipService
  2. ssh_askpass: exec(/usr/libexec/ssh-askpass): No such file or directory
  3. flash中Stage,stage,root和this的区别用法
  4. ie里的button标签的一个bug
  5. 将数组按指定大小分组
  6. Java黑皮书课后题第1章:*1.11(人口估算)编写一个程序,显示未来5年的每年人口数。假设当前的人口是312 032 486,每年有365天
  7. C语言学习之输入一个大于三的值判断是否为素数
  8. linux除了cat读取文件内容,linux cut命令和cat命令以及查看文件内容命令总结
  9. 大数据针对高校_“大数据+移动支付” 安徽高校食堂智慧升级
  10. 【Linux】scp“免密” 远程copy较多文件